Python 当使用Simon类时,我给出了两个参数,一个是self,另一个是sound。但是,当我使用列表时,我必须给出1 arg为什么**
类别Cat(): 是真的吗Python 当使用Simon类时,我给出了两个参数,一个是self,另一个是sound。但是,当我使用列表时,我必须给出1 arg为什么**,python,oop,parameters,arguments,self,Python,Oop,Parameters,Arguments,Self,类别Cat(): 是真的吗 def __init__(self, name, age): self.name = name self.age = age def walk(self): return f'{self.name} is just walking around' 西蒙班(Cat): def sing(自我、声音): 返回f'{sounds}' 莎莉班(猫): def sing(自我、声音): 返回f'{sounds}' 栗色类(猫): def sing(自
def __init__(self, name, age):
self.name = name
self.age = age
def walk(self):
return f'{self.name} is just walking around'
西蒙班(Cat):
def sing(自我、声音):
返回f'{sounds}'
莎莉班(猫):
def sing(自我、声音):
返回f'{sounds}'
栗色类(猫):
def sing(自我、声音):
返回f'{sounds}'
我的猫=[Simon('Simon',4),Sally('Sally',3),栗色('Maroon',2)]
印刷体(西蒙·辛(西蒙,“喵”)
对于《我的猫》中的猫:
print(f'this is {caty.name} ', caty.sing('meowww'))
我认为你的答案的格式可能有错误,这使阅读有点困难,但我会尝试回答:) 问题是,
Simon
是一个类,而列表中的所有猫都是类的实例
更清楚地说,“meowww”
和str
之间的区别是相同的:str
是一个类,而“meowww”
是类str
的实例
关键字self
实际上是指类的实例。实例化一个对象时,它调用方法\uuuu init\uuu
,并返回类型为Simon
的对象,其中包含\uu init\uuuu
中定义的所有属性
在您的情况下,您将执行simon=simon(“simon”,4)
,然后您将只能编写simon.sing(“meowww”)
,因为函数中的单词self
将自动引用您的对象simon
,该对象的类型为simon
但是,当您通过编写Simon.sing(“meowww”)
直接使用它时,您没有创建类Simon
的任何对象。因此,“自我”这个词不能指任何东西,你必须自己提供
你的情况很幸运:在你的函数sing
中,你不习惯self
。因此,您可以提供任何内容,并且该函数无论如何都会工作(请自己尝试:))。
如果按如下方式修改函数sing
,则会出现问题:
class Simon(Cat):
def sing(self, sounds): return f'{self.name} says: {sounds}'
当您试图让Simon唱歌时,它将引发一个属性错误:type对象“Simon”没有属性“name”
,因为您将self
作为Simon
提供。由于类Simon
尚未实例化,因此尚未调用\uuuu init\uuuu
方法,并且尚未定义self.name
如果不清楚,请毫不犹豫地询问:)