代码之家  ›  专栏  ›  技术社区  ›  one-hand-octopus

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

  •  1
  • one-hand-octopus  · 技术社区  · 7 年前

    我有一节课 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 回复  |  直到 7 年前
        1
  •  1
  •   Maxim Egorushkin    7 年前

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

        2
  •  0
  •   blhsing    7 年前

    你可以用 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