python-3.x - 将人员对象添加到另一个对象,除非它们相同
问题描述
我正在尝试使用 Python 的类。我创建了一个 Person() ,它只定义了一个带有“兄弟”属性的人。现在,我要做的是实例化一个 Person 并将所有其他 Person 对象添加到他的“兄弟”属性中。现在我的问题是,即使我添加了检查以确保我不会将对象自己添加到兄弟属性中,它也会发生。这是我的代码:
class Person():
def __init__(self, name, bros=[]):
self.name = name
self.bros = bros
def has_bros(self):
if len(self.bros) >0 :
return True
return False
def get_name(self):
return self.name
def add_bro(self, bro):
if not bro.get_name() in [b.get_name() for b in self.bros] and bro.get_name() != self.name:
self.bros.append(bro)
print(f"param {self.name} has bros: {[brow.get_name() for brow in self.bros]}")
def get_bros(self):
return self.bros
people = ["Martin", "Charles", "Miriam", "Etienne"]
final_list = list()
for person in people:
current_guy = Person(person)
for existing_person in final_list:
existing_person.add_bro(current_guy)
current_guy.add_bro(existing_person)
final_list.append(current_guy)
print("List of Persons with bros:")
for p in final_list:
print(f"Person name: {p.get_name()}, his bros :{[bro.get_name() for bro in p.get_bros()]}")
我做错了什么,但我找不到什么^^'有人可以向我解释为什么这不起作用吗?
谢谢各位!
解决方案
将您的__init__
方法替换为:
def __init__(self, name, bros=None):
self.name = name
self.bros = bros or []
否则,只要您在Person
没有明确给出bros
. 一个更简单的示例来演示发生了什么:
def test(default=[]):
default.append(1)
print(default)
调用了三遍:
>>> test()
[1]
>>> test()
[1, 1]
>>> test()
[1, 1, 1]
推荐阅读
- css - 如何使用 css hoverbox 制作过渡动画?
- ipfs - 是否需要集群来固定 ipfs 专用网络中的文件?
- android - 如何向 AOSP 添加自定义 INTENT 以授予对系统级控制调用的访问权限?
- drools - 如何在 OWL 本体上运行 Drools 规则引擎(KIE)?
- odata - ADF - Odata - 如何执行可选选择
- kotlin - Kotlin:多个命名的伴随对象
- python - 将具有相同大小和索引的数据帧相乘
- python - 如何删除字符串中的字母
- gnu-make - 如何根据条件的输出执行不同的配方?
- angular - Angular8 PrimeNG 反应形式的下拉菜单 - 初始值