在Python中使用__getattr__

时间:2014-06-14 10:52:00

标签: python oop coding-style getattr

您在Python中使用__getattr__的频率,而不是常规方法吗?

哪一项会被认为更好?

class A:
    def __getattr__(self, attribute):
        if attribute == "spam":
            return self._spam * 100
        elif attribute == "eggs":
            return "fried" + self._eggs
        raise AttributeError

class B:
    def get_spam(self):
        return self._spam * 100

    def get_eggs(self):
        return "fried" + self._eggs

1 个答案:

答案 0 :(得分:3)

使用@property decorator

,而不是__getattr__或访问者方法
class B(object):
    @property
    def spam(self):
        return self._spam * 100

    @property
    def eggs(self):
        return "fried" + self._eggs

仅使用__getattr__来支持动态属性,其中属性的数量和名称在类定义时是未知的。