继承在父类构造函数中创建的属性



我有以下父类:

class A:
def __init__(self, input1):
self.input1=input1
self.new_attrib=(self.input1)/7

以及从父类继承的子类:

class B(A):
def __init__(self, input1):
self.input1=input1
A.__init__(self,input1 )
def test1(self):
return self.new_attrib*2

根据OPP,我可以从父类self.new_attrib继承属性self.new_attrib吗?

从上面的代码中输出:"B"对象没有属性new_attrib

然后我尝试在 B 类的构造函数中super(B, self).__init__(input1)但出现相同的错误

使用 super(( 访问父类

class B(A):
def __init__(self, input1):
self.input1=input1
super().__init__(self,input1 )
def test1(self):
return super().new_attrib*2

您必须区分class attributesinstance attributes

在代码中,通过分配给self__init__()中创建instance attribute

如果你创建类的实例,你会看到实例属性是可用的。

b = B(42)
print(b.test1())

我认为您B.new_attrib检查的是,如果您的Class B有一个属性,该属性会检查是否存在任何class attributes而您的构造中并非如此。

要创建类属性(在所有实例中共享(,请使用以下命令:

def A():
my_class_attribute = 42
def __init__(self):
self.my_instance_attribute = 43

最新更新