当前位置:首页 > 编程知识 > 正文

Python继承中的变量

本文将会详细阐述Python中继承中的变量,包括实例变量、类变量、静态方法和类方法。

一、实例变量

实例变量指的是继承类中通过实例化对象所创建的变量,每个实例变量属于各自不同的对象。

class A:
    def __init__(self, a):
        self.a = a

class B(A):
    def __init__(self, a, b):
        A.__init__(self, a)
        self.b = b
        
b1 = B(10, 20)
b2 = B(30, 40)

print(b1.a) # 10
print(b1.b) # 20
print(b2.a) # 30
print(b2.b) # 40

在上面的代码中,我们定义了一个父类A和子类B,子类B继承父类A。通过实例化对象b1和b2,我们可以创建出两个实例变量a和b,它们分别属于各自不同的对象。

二、类变量

类变量指的是继承类中通过直接在类中定义的变量,它们属于所有该类实例的共同变量。

class A:
    var1 = "class variable"

class B(A):
    var2 = "subclass variable"

print(A.var1) # class variable
print(B.var1) # class variable
print(B.var2) # subclass variable

在上面的代码中,我们定义了一个父类A和子类B,我们通过类名就可以访问到类变量var1和var2。类变量属于所有该类实例的共同变量,所以在子类中也可以访问到父类定义的类变量。

三、静态方法

静态方法是继承类中定义的一种普通函数,只不过被包含在类定义中而不是在类实例中。我们可以使用@staticmethod装饰器来声明一个静态方法。

class A:
    @staticmethod
    def my_static_method(a, b):
        return a + b

class B(A):
    pass

print(A.my_static_method(1, 2)) # 3
print(B.my_static_method(3, 4)) # 7

在上面的代码中,我们定义了一个父类A和子类B,父类A中定义了一个静态方法my_static_method。我们可以通过类名直接调用静态方法。

四、类方法

类方法是继承类中的一种方法,可以访问类变量和类方法,我们可以使用@classmethod装饰器将一个类方法标识出来。

class A:
    var1 = "class variable"

    @classmethod
    def my_classmethod(cls):
        return cls.var1

class B(A):
    var2 = "subclass variable"

print(A.my_classmethod()) # class variable
print(B.my_classmethod()) # class variable

在上面的代码中,我们定义了一个父类A和子类B,父类A中定义了一个类方法my_classmethod。我们可以通过类名直接调用类方法,并且类方法可以访问类变量var1。