所有属性确实存在时如何解决属性错误?

时间:2018-02-07 13:34:11

标签: python inheritance attributeerror

我正在为python中的A Level课程编写一个程序,我需要使用继承访问从一个类到另一个类的属性。这是我想要做的一个例子。

class class1():
    def __init__(self):
        self.testValue = 'hello'

class class2(class1):
    def __init__(self):
        self.inheritedValue = class1.testValue
        print(self.inheritedValue)



object = class2()

运行此代码时,我收到以下属性错误。

AttributeError:输入object' class1'没有属性' testValue'

任何人都有这个解决方案吗?

2 个答案:

答案 0 :(得分:2)

首先是对代码样式的注释:类名用CamelCase编写,因此将它们命名为Class1和Class2。

其次,您的 Class1没有所述属性,但每个实例都有。

所以你的class2应该是

class Class2(Class1):
    def __init__(self):
        super().__init__() # now we have everything Class1 provides us with
        self.inheritedValue = self.testValue
        print(self.inheritedValue)

因为Class2的每个对象也是Class1的对象

答案 1 :(得分:0)

该属性不在46 64 5f 69 64 00 0x46 = CType::Object 0x64 = d 0x5F = _ 0x69 = i 0x64 = d 0x00 = NULL 范围内,而是以您实现它的方式存在。通过在类定义中传递它,它是继承的,但该属性尚不存在。也就是说,除非你调用了构造函数。有两种方法可以使用class2内置函数(在现实生活中不推荐,请参阅here,这是一个很好的阅读。无论如何,这里有一些解决方案:

super

如果你不想调用你继承的类的构造函数,你可以这样做:

class class1():
    def __init__(self):
        self.testValue = 'hello'

class class2(class1):
    def __init__(self):
        class1.__init__(self)        
        print(self.testValue)



obj = class2()

旁注,class class1(): testValue = 'hello' def __init__(self): pass class class2(class1): def __init__(self): self.inheritedValue = class1.testValue print(self.inheritedValue) obj = class2() 是内置的,因此您不应该使用它。