首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从父类设置子类中的属性

无法从父类设置子类中的属性
EN

Stack Overflow用户
提问于 2017-10-27 12:31:43
回答 2查看 757关注 0票数 1
代码语言:javascript
复制
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“行--不能设置属性。

代码语言:javascript
复制
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继承了,为什么在调用超人的构造函数时不编译?

EN

回答 2

Stack Overflow用户

发布于 2017-10-27 12:37:46

您得到的确切错误是什么?最佳实践规定,您应该在执行任何初始化工作之前调用父构造函数,如下所示

代码语言:javascript
复制
 super(SuperHuman, self).__init__(name)

然后,您可以将self.name = name放入超人构造函数中,因为父类负责处理它

票数 1
EN

Stack Overflow用户

发布于 2017-10-27 13:19:15

由于某种原因,当我将"name“字段更改为某个随机k时,错误消失了。

这将编译并打印:

代码语言:javascript
复制
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')

更新:我发现了一个愚蠢的错误。方法名正在毁掉它!我应该更细心一点

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46967545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档