本文介绍了带有@property 的@staticmethod的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想要
Stats.singleton.twitter_count += 1
我以为我可以做到
类统计:singleton_object = 无@财产@静态方法定义单例():如果 Stats.singleton_object:返回 Stats.singleton_objectStats.singleton_object = Stats()返回 Stats.singleton()
但是它抛出了一个异常:
>>>Stats.singleton.a = "b"回溯(最近一次调用最后一次):文件<stdin>",第 1 行,在 <module> 中类型错误:'property' 对象只有只读属性(分配给 .a) 解决方案
Singleton 在 Python 中毫无意义.
A 类:class_var = object()# 两个对象a, b = A(), A()# 到处都是相同的变量断言 a.class_var 是 b.class_var 是 A.class_var
Python 的 int
与简单的 object
不同,因此并不总是那么简单.但就您的目的而言,这似乎就足够了:
类统计:推特_计数 = 0Stats.twitter_count +=1Stats.twitter_count +=1断言 Stats.twitter_count == 2
I want
Stats.singleton.twitter_count += 1
and I thought I could do
class Stats:
singleton_object = None
@property
@staticmethod
def singleton():
if Stats.singleton_object:
return Stats.singleton_object
Stats.singleton_object = Stats()
return Stats.singleton()
But it throws an exception:
>>> Stats.singleton.a = "b"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'property' object has only read-only attributes (assign to .a)
解决方案
Singletons are pointless in python.
class A:
class_var = object()
# two objects
a, b = A(), A()
# same var everywhere
assert a.class_var is b.class_var is A.class_var
Python's int
s are differnt from simple object
s, so it's not always that simple . But for your purposes, this seems to be enough:
class Stats:
twitter_count = 0
Stats.twitter_count +=1
Stats.twitter_count +=1
assert Stats.twitter_count == 2
这篇关于带有@property 的@staticmethod的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!