我有以下父类:
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 attributes
和instance 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