Python 代码实现
class Animal:
totalCount = 0
@staticmethod
def getTotalCount():
return Animal.totalCount
class Dog(Animal):
def __init__(self):
Animal.totalCount += 1
# 创建几个 Dog 实例
dog1 = Dog()
dog2 = Dog()
dog3 = Dog()
print(Dog.getTotalCount())
静态属性和方法在继承中的行为及原理
- 静态属性:
- 行为:在上述代码中,
totalCount
是 Animal
类的静态属性。当创建 Dog
实例时,实际上是在操作 Animal
类的 totalCount
属性。所有 Animal
及其子类(如 Dog
)的实例共享这个静态属性。
- 原理:静态属性属于类本身,而不是类的实例。在内存中,静态属性只有一份,无论创建多少个类的实例,它们都访问和修改同一个静态属性。当子类创建实例并修改静态属性时,实际上是在修改父类的静态属性,因为它们共享这个属性。
- 静态方法:
- 行为:
getTotalCount
是 Animal
类的静态方法。Dog
类继承自 Animal
,所以 Dog
类也可以调用这个静态方法。通过 Dog.getTotalCount()
可以获取到创建的 Dog
实例总数(实际上是 Animal
类及其子类创建的实例总数,因为共享 totalCount
)。
- 原理:静态方法在类定义时绑定到类。子类继承父类时,会继承父类的静态方法。调用子类的静态方法时,实际上是调用父类中定义的静态方法,它操作的是类级别的属性(如
totalCount
)。静态方法不依赖于实例状态,只与类相关,所以可以在不创建实例的情况下通过类名调用。