4

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

4

3 回答 3

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

这是访问变量的最具适应性的方式,对于简单的用例,您不需要这样做,并且在 Python 中,您可以随时更改您的设计以在以后免费使用属性。

于 2013-06-06T08:50:04.900 回答
2

首先创建一个类的实例:

myinstance = MyClass()
myinstance.attr

否则你会得到一个错误,比如AttributeError: class MyClass has no attribute 'attr'尝试做MyClass.attr

于 2013-06-06T08:48:41.697 回答
0

是的,这是一种常见的做法。如果您想更好地控制检索属性的方式,请考虑使用__getattribute__and/or __getattr__

于 2013-06-06T08:54:26.957 回答