python - 如何正确定义子类属性

标签 python class attributes subclass

我有一个 Person 类和一个 SubPerson 子类:

class Person:

    def setname(self, name):
        self.name = name

    def display(self):
        print(self.name)


class SubPerson(Person):
    def display(self):
        print("Name: {0}".format(self.name))


if __name__ == "__main__":
    p = SubPerson()
    p.display()

但是当我调用p的显示方法时出现如下错误:

File "./person.py", line 14, in display
    print("Name: {0}".format(self.name))
AttributeError: SubPerson instance has no attribute 'name'

为什么?我该如何解决这个问题?

最佳答案

class Person:
 def __init__(self, name=""):
    self.name=name

 #def setname(self, name):
 #   self.name = name

 #instead of display
 def __str__(self):
    return self.name

 #def display(self):
 #    print(self.name)

 if __name__=='__main__':
    p=Person("YourName")
    print p

你必须“初始化”你的 Person 对象的属性。我会实现 str 方法来打印你的对象,就像在 C++ 中一样 std::operator<< ..

你的子类看起来像这样:

class SubPerson(Person):
 def __str__(self):
     return "Name: {0}".format(self.name)

还有一些其他方法(lenget 等..),您可以为自己的类覆盖这些方法..

关于python - 如何正确定义子类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25787261/

相关文章:

matlab - Matlab中的隐藏类类似于私有(private)函数

jquery - 如何通过 jquery 启用/禁用显示/隐藏的不显眼验证?

xslt - 引用 xsl 中的属性值 :param xsl:if test condition

java - 属性与变量/数据类型等之间的区别(java)

python - 解决 Pygame 的 "DLL load failed: %1 is not a valid Win32 application."

python - 如何处理图像分类的可变图像尺寸?

delphi - Delphi 中将对象强制转换为父类

python - 附加到列表时更改实例中的变量不起作用 - Python

python - 在字符序列中寻找主题

python - Firestore : REST API runQuery method expects wrong parent path pattern