我对Python比较陌生,为了更好地理解Python的Zen以及它的建议编码风格,我需要从脑海中消除这个疑问。
假设我必须定义和实例化代表一个人的数据结构。这将具有以下属性:
我可以想到两种不同的方法来表示这个实例:
前者是微不足道的(遵循一个可能的例子):
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person('David', 25)
# getter
print(person.name, person.age)
# setter
person.age = 27
后者包含我以下列方式使用的属性列表:
NAME = 0
AGE = 1
person = ['David', 25]
# getter
print(person[NAME], person[AGE])
# setter
person[AGE] = 27
哪种方法最接近Python的禅宗?
答案 0 :(得分:3)
对于为某些数据制作python“东西”的最紧凑和方便的方法是collections.namedtuple
,它提供了类的一些显式自我文档优点,但是简单的python类型的便利性(像一个字典):
>>> from collections import namedtuple
>>> Person = namedtuple("Person", "name age")
>>> Person("Alice", 33)
Person(name='Alice', age=33)
>>> alice = _
>>> bob = Person(age=27, name="Bob")
>>> alice == bob
False
>>> bob.age
27
>>>
答案 1 :(得分:2)
既然你问到python的禅,我会说class或者namedTuple更好。请参阅The Zen of Python的这一部分:
如果实施难以解释,那是个坏主意。
更容易解释:“此类代表一个人”而不是:“此列表代表一个人,访问您需要访问此模块常量的人的属性并将其用作索引”。