python中寻址属性的样式

fre*_*ude 4 python coding-style

这个问题是风格之一.由于python中的属性不是私有的,使用类似的东西直接在类之外解决它们是一种好的常见做法my_obj.attr吗?或者,也许,通过成员函数来做它仍然更好,就像get_attr()在c ++中通常的做法一样?

jam*_*lak 12

听起来你想要使用属性:

class Foo(object):
    def __init__(self, m):
        self._m = m
    @property
    def m(self):
        print 'accessed attribute'
        return self._m
    @m.setter
    def m(self, m):
        print 'setting attribute'
        self._m = m


>>> f = Foo(m=5)
>>> f.m = 6
setting attribute
>>> f.m
accessed attribute
6
Run Code Online (Sandbox Code Playgroud)

这是访问变量的最自适应方式,对于您不需要执行此操作的简单用例,在Python中,您可以随时更改设计以便以后免费使用属性.

  • "你可以随时改变你的设计,以便免费使用." - 重要的一点.Python中的优秀设计是首先使用常规属性,直到您发现需要getter和setter._Then_你用属性替换它,客户端代码不是更明智的. (3认同)