带有@property 的@staticmethod [英] @staticmethod with @property

查看:51
本文介绍了带有@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 ints are differnt from simple objects, 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆