gpt4 book ai didi

python - @staticmethod 和 @property

转载 作者:IT老高 更新时间:2023-10-28 21:41:49 30 4
gpt4 key购买 nike

我想要

Stats.singleton.twitter_count += 1

我认为我可以做到

class Stats:
singleton_object = None

@property
@staticmethod
def singleton():
if Stats.singleton_object:
return Stats.singleton_object
Stats.singleton_object = Stats()
return Stats.singleton()

但它会抛出异常:

>>> 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)

最佳答案

就最初的问题而言,用户 kaizer.se 正在做一些事情。我在简单性方面更进了一步,现在它只需要一个装饰器:

class classproperty(property):
def __get__(self, cls, owner):
return classmethod(self.fget).__get__(None, owner)()

用法:

class Stats:
_current_instance = None

@classproperty
def singleton(cls):
if cls._current_instance is None:
cls._current_instance = Stats()
return cls._current_instance

如前所述,这种创建单例的方式不是一个好的设计模式;如果必须这样做,元类工厂是一种更好的方法。不过,我只是对类属性的前景感到兴奋,所以,就是这样。

关于python - @staticmethod 和 @property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697501/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com