python - Python 中的类:__str__ 方法和列表
问题描述
我在学校得到了这个任务:“完成Animal类和一个类变量animals(list)和两个实例变量name(str)和number(int)。你需要实现init和str方法”这就是我所做的:
class Animal:
animals = []
number = 0
def __init__(self, name):
self.name = name
Animal.number =+1
def __str__(self):
return f"{Animal.number}. {self.name.capitalize()}"
以下是我应该完成的测试:
Animal.animals.clear()
dog = Animal('dog')
assert dog.name == 'dog'
assert dog.number == 1
assert str(dog) == '1. Dog'
cat = Animal('cat')
assert cat.name == 'cat'
assert cat.number == 2
assert str(cat) == '2. Cat'
我不明白在这种情况下如何使用列表(以及如何填写)以及如何保持数字更新。我是初学者,所以请保持简单的语言,非常感谢。
解决方案
只需在 init 中创建新的动物实例时添加到动物列表中。
class Animal:
animals = []
number = 0
def __init__(self, name):
self.name = name
Animal.animals.append(name)
Animal.number += 1 # '+=' not '=+'
def __str__(self):
return f"{Animal.number}. {self.name.capitalize()}"
如果您不希望列表中出现相同的动物两次,您可以执行以下操作:
if name not in Animal.animals:
Animal.animals.append(name)
推荐阅读
- java - Mybatis 获取 clob 字段
- sql - 是否可以在数据库删除时删除事件通知(或者当它被备份覆盖时)?
- uwp - 将输入麦克风音频播放到 ausio 输出
- mysql - 在 mySql 中,当我将任何现在或任何日期时间与任何具有日期时间的列进行比较时,如何忽略过去的时间?
- postgresql - 保持表与另一个表同步,但累积/分组数据
- django - 如何在 Django simple jwt 中为 Web 和移动应用程序设置不同的到期时间?
- r - 构建自相关函数
- c - 如何在结构中使用指针?
- azure - Grafana / Azure Monitor 维度过滤而不拆分
- firebase - Firebase返回文档的字段null