类与列表(访问者编码风格)

时间:2014-11-05 20:19:51

标签: python list class coding-style

我对Python比较陌生,为了更好地理解Python的Zen以及它的建议编码风格,我需要从脑海中消除这个疑问。

假设我必须定义和实例化代表一个人的数据结构。这将具有以下属性:

  1. 名称
  2. 年龄
  3. 我可以想到两种不同的方法来表示这个实例:

    1. 定义一个类
    2. 使用列表
    3. 前者是微不足道的(遵循一个可能的例子):

      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的禅宗?

2 个答案:

答案 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的这一部分:

  

如果实施难以解释,那是个坏主意。

更容易解释:“此类代表一个人”而不是:“此列表代表一个人,访问您需要访问此模块常量的人的属性并将其用作索引”。