gpt4 book ai didi

Python 继承 : when and why __init__

转载 作者:太空狗 更新时间:2023-10-30 01:57:11 24 4
gpt4 key购买 nike

我是 Python 新手,试图了解继承方法背后的哲学/逻辑。问题最终是关于为什么以及何时必须在子类中使用 __init__ 方法。示例:

似乎从父类(super class)继承的子类不需要有自己的构造函数 (__init__) 方法。下面,一只狗继承了哺乳动物的属性(名字、年龄)和方法(makenoise)。您甚至可以添加一个方法 (do_a_trick),看起来一切都“应该”地工作。

但是,如果我想像在 Cats 类中尝试那样在子类中添加一个新属性,我会收到一条错误消息,指出“self”未定义。然而我在 dog 类的定义中使用了“self”。区别的本质是什么?它似乎定义了猫,因为我希望我需要使用 __init__(self,name)super()__init__(name)。为什么不同?

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"

最佳答案

Explicit is better than implicit.

但是,您可以执行以下操作:

class Dogs(Mammals):
def __init__(self):
#add new attribute
self.someattribute = 'value'
Mammals.__init__(self)

class Dogs(Mammals):
def __init__(self):
#add new attribute
self.someattribute = 'value'
super(Mammals, self).__init__()

关于Python 继承 : when and why __init__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43624913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com