在Python类中将函数作为属性访问

53 投票
2 回答
33073 浏览
提问于 2025-04-16 15:58

我现在遇到一个情况,能把一个类的方法当作属性来用会非常有用(虽然不是绝对必要)。这是因为我在做一个API,它用到getattr来设置字典的返回值,我不想把这个小功能搞得乱七八糟。

我记得之前看到过一个叫@attribute的装饰器,但现在找不到了(无论是在Python还是Django里)。

简单来说:

我想把这个:

class foo:
    bar = "bar"
    def baz(self):
        return "baz"

变成这个:

>>> f = foo()
>>> f.baz
"baz"

(为了更清楚地说明)而不是这个:

>>> f = foo()
>>> f.baz
<bound method foo.baz of <__builtin__.foo instance at 0x...>>

2 个回答

17

看看这个叫做 property 的装饰器形式。

@property
def baz(self):
  return "baz"
83

你可以使用 @property 这个装饰器。

class foo(object):
    bar = "bar"
    @property
    def baz(self):
        return "baz"

撰写回答