python—如何使用类方法获取类列表的示例变量?

8gsdolmq  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(244)

抱歉,如果这是一个太简单的问题,但我只是一个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.dogs就可以访问dogs列表,但是如何访问列表中每个项目的名称变量呢?
谢谢你的帮助。

t5zmwmid

t5zmwmid1#

你可以做:

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]
db2dz4w8

db2dz4w82#

有两件事不对:
您将立即返回,而不是允许生成结果列表。 i 是一个例子 Dog 所以 i.name 是一个狗名,而不是狗名列表中的索引 Dog 指数
首先构建列表,然后在循环完成构建列表后返回它。

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

相关问题