Python继承:何时以及为什么__init__
我是一个
Python新手,试图理解继承方法背后的哲学/逻辑.问题最终会考虑为何以及何时必须在子类中使用__init__方法.例:
似乎从超类继承的子类不需要有自己的构造函数(__init__)方法.下面,狗继承了哺乳动物的属性(名称,年龄)和方法(makenoise).你甚至可以添加一个方法(do_a_trick)似乎所有东西都是“应该”的. 但是,如果我想在Cats类中尝试在子类中添加一个新属性,我会收到一条错误,说“self”未定义.然而我在狗类的定义中使用了“自我”.差异的本质是什么? class Mammals(object): def __init__(self,name): self.name = name print("I am a new-born "+ self.name) self.age = 0 def makenoise(self): print(self.name + " says Hello") class Dogs(Mammals): def do_a_trick(self): print(self.name + " can roll over") class Cats(Mammals): self.furry = "True" #results in error `self' is not defined mymammal = Mammals("zebra") #output "I am a new-born zebra" mymammal.makenoise() #output "zebra says hello" print(mymmmal.age) #output 0 mydog = Dogs("family pet") #output "I am a new-born family pet" mydog.makenoise() #output "family pet says hello" print(mydog.age) # output 0 mydog.do_a_trick() #output "family pet can roll over" 解决方法
在你的超类Mammal中,你有一个__init__函数,它接受你选择的参数*来调用self.当你在__init__函数的主体中时,这个参数在范围内 – 它是一个局部变量,就像任何局部变量一样,并且在包含函数终止后不可能引用它. 现在,在Cat中,您有一行代码根本不在函数中.此时没有任何内容,包括自我,这就是失败的原因.如果您要在Cat中定义一个带有名为self的参数的函数,则可以引用该参数.如果该参数碰巧是Cat上的实例方法的第一个参数,那么它将具有调用它的Cat实例的值.否则,它将传递给它的任何东西. *你明智地选择了! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |