当前位置: 首页 > 面试题库 >

@staticmethod与@property

吕琪
2023-03-14
问题内容

我想要

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)

问题答案:

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的int与simple有所不同object,因此并不总是那么简单。但是出于您的目的,这似乎就足够了:

class Stats:
    twitter_count = 0

Stats.twitter_count +=1
Stats.twitter_count +=1
assert Stats.twitter_count == 2


 类似资料:
  • Python其实有3个方法,即静态方法(staticmethod),类方法(classmethod)和实例方法,如下: def foo(x): print "executing foo(%s)"%(x) class A(object): def foo(self,x): print "executing foo(%s,%s)"%(self,x) @classmethod

  • 本文向大家介绍Python中staticmethod和classmethod的作用与区别,包括了Python中staticmethod和classmethod的作用与区别的使用技巧和注意事项,需要的朋友参考一下 一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。 这有利于组织代

  • 问题内容: super()是否不打算与静态方法一起使用? 当我尝试类似的东西 我收到以下错误 如果我将静态方法更改为类方法,并将类实例传递给super(),则一切正常。我是在这里错误地调用super(type)还是缺少我想要的东西? 问题答案: 的简短答案 我是在这里错误地调用super(type)还是缺少我想要的东西? 是:是的,您打错了它的名称……而且(实际上是 因为 ),您缺少某些内容。 但

  • 问题内容: 当我尝试从类的正文中使用静态方法,并使用内置函数作为装饰器来定义静态方法时,如下所示: 我收到以下错误: 我了解为什么会发生这种情况(描述符绑定) ,并且可以通过在上次使用后手动将其转换为静态方法来解决此问题,如下所示: 所以我的问题是: 是否有更好的方法(如更清洁或更“ Pythonic”的方法)来实现这一目标? 问题答案: 对象显然具有存储原始原始函数的属性(它们必须这样做)。所以

  • 问题内容: 有人可以给我解释 中 的含义吗?我需要知道区别和含义。 据我了解,告诉一个类它是一个应该继承到子类中的方法,或者……某种东西。但是,这有什么意义呢?为什么不直接定义不添加类方法或任何@定义? tl; dr: 我什么时候应该使用它们,为什么要使用它们,以及如何使用它们? 我对非常了解,因此使用更高级的编程概念应该不是问题。如果可能,请给我相应的示例。 问题答案: 尽管和非常相似,但是这两

  • 我最近使用py魅力和sonarqube来审查我的代码。这两个工具都建议更新很多方法,例如,它们的主体中没有使用,而是使用装饰器。 我完全理解为什么,但我觉得它几乎毫无意义。关于性能,我不确定它会有那么大的帮助。此外,这些通常是被覆盖的django方法。我可以安全地使用那个装饰器吗?或者它毫无意义,不值得花时间更新?