可以创建家庭和个人实例的简单代码。有一种方法可以将任何人的任何实例添加到任何家庭实例中。
class Family:
    def __init__(self):
        self.names, self.birthplaces, self.dobs, self.deaths = [], [], [], []
class Person:
    def __init__(self, name, birthplace, dob, death=None):
        self.name, self.birthplace, self.dob, self.death = name, birthplace, dob, death
    def add_member_to(self, family_tree):
        family_tree.names.append(self.name)
        family_tree.birthplaces.append(self.birthplace)
        family_tree.dobs.append(self.dob)
        if self.death is None:
            family_tree.deaths.append('N/A')
        else:
            family_tree.deaths.append(self.death)
family = Family()
mike = Person('Michael', 'Nigeria', '06-07-2004')
esther = Person('Esther', 'KC', '03-25-2009')
mike.add_member_to(family)
esther.add_member_to(family)
print(family.dobs)
print(family.names)
print(family.birthplaces)
print(family.deaths)发布于 2019-09-23 22:14:36
我的一个改进就是这一行代码
if self.death is None:
    family_tree.deaths.append('N/A')
else:
    family_tree.deaths.append(self.death)可以简化为一行:
family_tree.deaths.append('N/A' if self.death is None else self.death)另外,我建议将这些类中的所有代码保留在主护罩中,这样您就可以导入这些类,而无需在模块中运行这些代码。
发布于 2019-09-24 01:11:15
add_member_to对family_tree进行操作并更改其字段。将类Family中的方法定义为add_member更符合逻辑。Family类应该将Persons的列表直接存储为字段,而不是复制家庭成员的所有信息。成员的信息可以在需要时直接从Person对象中检索。这避免了重复复制相同的数据,这增加了维护的负担(例如,Person信息的每一次更改都需要随后对复制的信息进行Family更改)。names、birthplaces、dobs、deaths可以定义为类属性,并通过定义的方法访问。Person可以定义为数据集,它可以从字段定义自动生成方法(如__init__ )。对于这个小程序来说,这可能是过分的,但是对于更大的类是有用的。https://codereview.stackexchange.com/questions/229325
复制相似问题