类属性应该是树状还是扁平状?

时间:2018-10-26 13:24:10

标签: python

我有一个student类,属性为name,如下所示:

class student(object):
    def __init__(self, name):
        self.name = name

现在,如果我想要一些子属性,例如名字,中间名和姓氏,我应该使用树状结构:

class student(object):
    ...
        self.name.first = first_name
        self.name.middle = middle_name
        self.name.last = last_name

或将属性统一更改为3个属性

class student(object):
    ...
        self.first_name = first_name
        self.middle_name = middle_name
        self.last_name = last_name

2 个答案:

答案 0 :(得分:1)

PEP 20 -- The Zen of Python建议扁平比嵌套更好。

答案 1 :(得分:0)

您可以使用collections.namedtuple

from collections import namedtuple
class student(object):
    name_type = namedtuple('name', ['first_name', 'middle_name', 'last_name'])
    def __init__(self, name: name_type):
        self.name = name

这样:

s = student(student.name_type('John', 'Jack', 'Smith'))
print(s.name.first_name, s.name.middle_name, s.name.last_name)

输出:

John Jack Smith