如何通过使用类方法获得类列表的实例变量?



抱歉,如果这是一个太简单的问题,但我只是一个初学者在python和观看一些教程视频类。我试着自己添加一些东西,但做不到。下面是代码:

class Dog:
dogs = []
def __init__(self, name):
self.name = name
self.dogs.append(self)

@classmethod
def num_dogs(cls):
return len(cls.dogs)
@classmethod
def dogs_names(cls):
for i in cls.dogs:
return cls.dogs[i.name]

@staticmethod
def bark(n):
"""barks n times"""
for _ in range(n):
print("Bark! ")


tim = Dog("Tim")
jim = Dog("Jim")
print(Dog.num_dogs())
print(Dog.dogs_names())

所以我知道dogs_names()方法看起来很愚蠢,但我希望你能理解我的观点。我可以通过返回cls来访问狗列表。但是我如何到达列表中每个项目的名称变量呢?

谢谢你的帮助。

你可以这样做:

class Dog:
dogs = []
def __init__(self, name):
self.name = name
self.dogs.append(self)

@classmethod
def num_dogs(cls):
return len(cls.dogs)
@classmethod
def dogs_names(cls):
names = []  # create a new list
for i in range(len(cls.dogs)):
names.append(cls.dogs[i].name)  # append each name one by one to the list
return names  # return the full list at the end

@staticmethod
def bark(n):
"""barks n times"""
for _ in range(n):
print("Bark! ")


tim = Dog("Tim")
jim = Dog("Jim")
print(Dog.num_dogs())
print(Dog.dogs_names())

你也可以使用列表推导:

@classmethod
def dogs_names(cls):
return [dog.name for dog in cls.dogs]

有两点不对:

  1. 您正在立即返回,而不是允许构建结果列表。
  2. iDog的实例,因此i.name是狗名,而不是Dog索引列表中的索引。

先构建列表,然后在循环构建列表完成后返回

@classmethod
def dogs_names(cls):
dog_names = []
for i in cls.dogs:
dog_names.append(i.name)
return dog_names

最新更新