python 怎么把类方法装饰为属性?

2016 年 10 月 12 日
 vtoexsir
class C(object):
@classmethod
def m():
pass


m()是类方法,调用:
C.m()
但我当成属性的方式调用,像这样:
C.m
请问该怎么弄呢?
请最好提供个简单的例子, 多谢!
2824 次点击
所在节点    Python
11 条回复
cheetah
2016 年 10 月 12 日
没什么简单的办法,也许用 metaclass 可以做到
glogo
2016 年 10 月 12 日
使用 data descriptor?或者是实现 __call__()方法这种?
Yinz
2016 年 10 月 12 日
@property
Google 的话解释和例子会比较详细
Yinz
2016 年 10 月 12 日
咦,没看到是类方法🤔
binux
2016 年 10 月 12 日
```
class C(object):
@classmethod
def _m(cls):
return 1

m = property(lambda s: s._m())
```
thinker3
2016 年 10 月 12 日
类方法不是还有一个 cls 参数么?
eric6356
2016 年 10 月 12 日
stackoverflow 上有个方法是继承 property 并且改写__get__方法
http://stackoverflow.com/questions/128573/using-property-on-classmethods
aaronzjw
2016 年 10 月 12 日
SlipStupig
2016 年 10 月 13 日
\@property
linuxchild
2016 年 10 月 13 日
bwangel
2016 年 10 月 13 日
参考这篇答案: http://stackoverflow.com/questions/128573/using-property-on-classmethods

写了一个小例子, classProperty 只有 getter 可以使用:

<script src="https://gist.github.com/bwangel23/6323253b0f1fcb48a578c21c86af95ca.js"></script>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/312304

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX