当前位置: 首页 > news >正文

Python教程108:针对面向对象Class类知识要点,源码示例再演示

类的基础结构,比如定义类、初始化方法__init__,然后实例化对象。然后是类的属性,包括实例属性和类属性。接着是方法,比如实例方法、类方法、静态方法的区别。还有继承和多态,这是面向对象的重要部分。可能还需要提到特殊方法,比如__str__或者运算符重载。封装的话,私有属性和访问器方法也应该讲一下。还有可能包括property装饰器,或者类的组合等等。在这里插入图片描述

主要知识点总结:

类结构:class 关键字定义,包含属性(类属性/实例属性)和方法

实例化:通过 类名() 创建对象,自动调用 init 方法

方法类型:

实例方法:默认类型,第一个参数为 self

类方法:@classmethod 装饰,第一个参数为 cls

静态方法:@staticmethod 装饰,无默认参数

继承:子类继承父类属性和方法,可通过方法重写实现多态

封装:使用双下划线 __ 定义私有属性,通过 property 实现访问控制

特殊方法:通过实现 add, str 等方法实现运算符重载和对象描述

这些知识点构成了 Python 面向对象编程的核心基础,实际开发中常用于组织复杂逻辑、实现代码复用和创建数据结构。

# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:WdPython
# ======================
# 1. 类的基本定义与实例化
# ======================
class Animal:
    # 类属性(所有实例共享)
    species = "Unknown"

    # 初始化方法(构造方法)
    def __init__(self, name, age):
        # 实例属性
        self.name = name  
        self.age = age

    # 实例方法
    def speak(self):
        return "......"

# 实例化对象
a1 = Animal("Buddy", 3)
print(a1.speak())  # 输出:......


# ==============================
# 2. 类属性 vs 实例属性
# ==============================
print(Animal.species)  # 类属性访问 → "Unknown"
a1.species = "Canine"  # 为实例创建同名属性
print(a1.species)      # 输出:"Canine"
print(Animal.species)  # 类属性不变 → "Unknown"


# ======================================
# 3. 类方法 & 静态方法
# ======================================
class Dog(Animal):
    species = "Canis lupus familiaris"  # 覆盖父类属性

    @classmethod
    def from_birth_year(cls, name, birth_year):
        """类方法:通过出生年计算年龄"""
        age = 2023 - birth_year
        return cls(name, age)  # 等价于 Dog(name, age)

    @staticmethod
    def is_valid_name(name):
        """静态方法:验证名字有效性"""
        return len(name.strip()) > 0

# 使用类方法创建实例
d1 = Dog.from_birth_year("Rex", 2020)
print(d1.age)  # 输出:3

# 调用静态方法
print(Dog.is_valid_name("  "))  # 输出:False


# ==============================
# 4. 继承与多态
# ==============================
class Cat(Animal):
    def speak(self):  # 方法重写
        return "Meow!"

def animal_sound(animal):  # 多态示例
    print(animal.speak())

animal_sound(Dog("Buddy", 3))  # 输出:......
animal_sound(Cat("Whiskers", 2))  # 输出:Meow!


# ==============================
# 5. 封装与私有属性
# ==============================
class BankAccount:
    def __init__(self, balance):
        self.__balance = balance  # 双下划线开头的私有属性

    @property
    def balance(self):  # getter
        return self.__balance

    @balance.setter
    def balance(self, value):  # setter
        if value >= 0:
            self.__balance = value

account = BankAccount(100)
# account.__balance = 200  # 错误,无法直接访问
account.balance = 200      # 通过setter修改
print(account.balance)     # 输出:200


# ==============================
# 6. 特殊方法(魔术方法)
# ==============================
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):  # 运算符重载
        return Vector(self.x + other.x, self.y + other.y)

    def __str__(self):  # 字符串表示
        return f"Vector({self.x}, {self.y})"

v1 = Vector(2, 3)
v2 = Vector(1, 4)
print(v1 + v2)  # 输出:Vector(3, 7)

完毕!!感谢您的收看

----------★★跳转到历史博文集合★★----------

我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame

相关文章:

  • Qt的QTreeWidge的使用
  • 从技术债务到架构升级,滴滴国际化外卖的变革
  • MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
  • 大模型的未来已来
  • 苍穹外卖学习
  • 谭浩强C语言程序设计(5) 9章
  • 通俗理解-L、-rpath和-rpath-link编译链接动态库
  • pyqt自制简单浏览器(python)
  • QT c++ QObject::connect函数 线程给界面发送数据
  • JavaScript设计模式 -- 观察者模式
  • 《玩转AI大模型:从入门到创新实践》(8)第六章 进阶实战:定制你的AI大脑
  • Ollama本地部署DeepSeek+构建个人知识库笔记
  • C语言:数据的存储
  • 自动化测试实战
  • uake 网络安全 reverse网络安全
  • 2.7 静态方法/构造函数Mock
  • JAVA高级工程师-面试经历(含面试问题及解答)
  • 分享 UniApp 中超好看的卡片阴影样式
  • 【Stable Diffusion部署至Google Colab】
  • c/c++蓝桥杯经典编程题100道(19)质因数分解
  • 给素材网站做签约设计不想做了/1元购买域名
  • 在线名片制作网站开发/seo优化seo外包
  • 不想让网站保存密码怎么做/360推广客服电话是多少
  • 真人视频发牌网站开发/广州网络运营课程培训班
  • b2b2c平台网站建设/站长资源平台
  • 网站建设永远在路上/百度推广外包哪家不错