首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FAMILY.PY x- OOPython

FAMILY.PY x- OOPython
EN

Code Review用户
提问于 2019-09-19 16:09:06
回答 2查看 75关注 0票数 3

可以创建家庭和个人实例的简单代码。有一种方法可以将任何人的任何实例添加到任何家庭实例中。

代码语言:javascript
运行
复制
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)
EN

回答 2

Code Review用户

发布于 2019-09-23 22:14:36

我的一个改进就是这一行代码

代码语言:javascript
运行
复制
if self.death is None:
    family_tree.deaths.append('N/A')
else:
    family_tree.deaths.append(self.death)

可以简化为一行:

代码语言:javascript
运行
复制
family_tree.deaths.append('N/A' if self.death is None else self.death)

另外,我建议将这些类中的所有代码保留在主护罩中,这样您就可以导入这些类,而无需在模块中运行这些代码。

票数 1
EN

Code Review用户

发布于 2019-09-24 01:11:15

  • add_member_tofamily_tree进行操作并更改其字段。将类Family中的方法定义为add_member更符合逻辑。
  • Family类应该将Persons的列表直接存储为字段,而不是复制家庭成员的所有信息。成员的信息可以在需要时直接从Person对象中检索。这避免了重复复制相同的数据,这增加了维护的负担(例如,Person信息的每一次更改都需要随后对复制的信息进行Family更改)。namesbirthplacesdobsdeaths可以定义为类属性,并通过定义的方法访问。
  • Person可以定义为数据集,它可以从字段定义自动生成方法(如__init__ )。对于这个小程序来说,这可能是过分的,但是对于更大的类是有用的。
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/229325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档