Python 当使用Simon类时,我给出了两个参数,一个是self,另一个是sound。但是,当我使用列表时,我必须给出1 arg为什么**

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(自

类别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(自我、声音): 返回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

如果不清楚,请毫不犹豫地询问:)