一篇文章教会你---面向对象的其他特性

1、实例属性

定义
  • 实例属性属于对象(类的实例),每个对象有自己独立的属性值。

  • 通常在 init 方法中通过 self.属性名 初始化。

  • 添加: 对象名.实例属性 = 值 或者 self.实例属性 = 值

  • 获取: 对象名.实例属性 或者 self.实例属性

class Dog:
    def __init__(self, name):
        self.name = name  # 实例属性

dog1 = Dog("Buddy")
dog2 = Dog("Milo")

print(dog1.name)  # 输出: Buddy
print(dog2.name)  # 输出: Milo
特点
  • 不同实例的同名属性互不影响。

  • 可通过 对象.属性名 直接访问或修改。

2、类属性

定义
  • 类属性属于类本身,所有实例共享同一个类属性。

  • 在类内部直接定义(不在方法中)。

  • 添加/修改: 在类中方法外添加 修改是使用类名 : 类名.类属性 = 值

  • 获取 类名.类属性名 对象名.类属性 或者 self.类属性

class Dog:
    species = "Canis familiaris"  # 类属性

    def __init__(self, name):
        self.name = name

dog1 = Dog("Buddy")
dog2 = Dog("Milo")

print(dog1.species)  # 输出: Canis familiaris
print(dog2.species)  # 输出: Canis familiaris

# 修改类属性(所有实例生效)
Dog.species = "Canis lupus"
print(dog1.species)  # 输出: Canis lupus

dog1.species = "New species"
print(dog1.species)  # 输出: New species(实例属性)
print(Dog.species)   # 输出: Canis lupus(类属性未变)
特点
  • 类属性通常用于表示类的全局状态(如默认值、计数器)。

  • 注意:如果实例尝试修改类属性,会创建一个同名实例属性,不影响类属性:

实例属性和类属性总结

实例属性属于每个对象实例,每个实例可以有自己不同的值。而类属性属于类本身,所有实例共享同一个类属性。比如,如果有一个类Car,类属性可以是车轮数,通常所有汽车都是4个轮子,而实例属性可能是颜色,每辆车颜色不同

3、类方法(Class Methods)

定义
  • 类方法属于类,而非实例。使用 @classmethod 装饰器定义,第一个参数为 cls(表示类本身)。

  • 类方法可以访问和修改类属性,常用于工厂方法或操作类级别数据。

class Dog:
    species = "Canis familiaris"

    def __init__(self, name):
        self.name = name

    @classmethod
    def change_species(cls, new_species):  # 修改类属性
        cls.species = new_species

    @classmethod
    def from_string(cls, dog_str):  # 工厂方法:从字符串创建实例
        name, species = dog_str.split("-")
        dog = cls(name)  # 等价于 Dog(name)
        cls.species = species  # 修改类属性
        return dog

# 通过类方法修改类属性
Dog.change_species("Canis lupus")
print(Dog.species)  # 输出: Canis lupus

# 通过工厂方法创建实例
dog3 = Dog.from_string("Rex-Canis dingo")
print(dog3.name)     # 输出: Rex
print(Dog.species)   # 输出: Canis dingo
特点
  • 类方法通过 cls 操作类属性,适合处理与类相关的逻辑。

  • 常用于替代构造函数(如解析不同格式的数据创建实例)。

4、静态方法(Static Methods)

定义
  • 静态方法与类和实例无关,仅逻辑上属于类。使用 @staticmethod 装饰器定义,无 selfcls 参数。

  • 静态方法不访问类或实例属性,相当于普通函数,但组织在类中以提高内聚性。

class MathUtils:
    @staticmethod
    def add(a, b):  # 无 cls 或 self 参数
        return a + b

    @staticmethod
    def is_even(number):
        return number % 2 == 0

# 直接通过类调用
print(MathUtils.add(3, 5))      # 输出: 8
print(MathUtils.is_even(4))     # 输出: True

# 也可以通过实例调用(但不推荐)
util = MathUtils()
print(util.is_even(5))          # 输出: False
特点
  • 静态方法通常用于工具函数,与类相关但不依赖类或实例状态。

  • 提升代码可读性和组织性。

 一篇文章教会你---面向对象的其他特性_第1张图片

你可能感兴趣的:(python,开发语言)