class Human():
def __init__(self,name):
print("human's constructor")
self.name = name
def sing(self):
print("la la")
#child class - separate file
from Human import Human
class SuperHuman(Human):
def __init__(self,name, superpowers = ["super strength", "bulletproof"]):
print("superhuman's constructor")
self.name = name # this line gives error
self.superpowers = superpowers
super().__init__(name)这段代码崩溃是因为在SuperHuman.py中"self.name = name“行--不能设置属性。
if __name__ == '__main__':
sup = SuperHuman(name="Tick")
# Instance type checks
if isinstance(sup, Human):
print('I am human')
if type(sup) is SuperHuman:
print('I am a superhero')name字段已经从Human继承了,为什么在调用超人的构造函数时不编译?
发布于 2017-10-27 12:37:46
您得到的确切错误是什么?最佳实践规定,您应该在执行任何初始化工作之前调用父构造函数,如下所示
super(SuperHuman, self).__init__(name)然后,您可以将self.name = name放入超人构造函数中,因为父类负责处理它
发布于 2017-10-27 13:19:15
由于某种原因,当我将"name“字段更改为某个随机k时,错误消失了。
这将编译并打印:
class Human:
def __init__(self,k):
print("human's constructor")
self.k = k
print("name assigned: " + str(self.k))
@property
def name(self):
return self.k
if __name__ == '__main__':
sup = Human("Tick")
# Instance type checks
if isinstance(sup, Human):
print('I am human')更新:我发现了一个愚蠢的错误。方法名正在毁掉它!我应该更细心一点
https://stackoverflow.com/questions/46967545
复制相似问题