相关疑难解决方法(0)

3360
推荐指数
24
解决办法
73万
查看次数


在Python中,如何在类方法中访问"静态"类变量

如果我有以下python代码:

class Foo(object):
    bar = 1

    def bah(self):
        print(bar)

f = Foo()
f.bah()
Run Code Online (Sandbox Code Playgroud)

它抱怨

NameError: global name 'bar' is not defined
Run Code Online (Sandbox Code Playgroud)

如何bar在方法中访问类/静态变量bah

python

146
推荐指数
4
解决办法
14万
查看次数

为什么Borg模式比Python中的Singleton模式更好

为什么Borg模式Singleton模式更好?

我问,因为我没有看到它们导致任何不同.

博格:

class Borg:
  __shared_state = {}
  # init internal state variables here
  __register = {}
  def __init__(self):
    self.__dict__ = self.__shared_state
    if not self.__register:
      self._init_default_register()
Run Code Online (Sandbox Code Playgroud)

辛格尔顿:

class Singleton:
  def __init__(self):
    # init internal state variables here
    self.__register = {}
    self._init_default_register()

# singleton mechanics external to class, for example this in the module
Singleton = Singleton()
Run Code Online (Sandbox Code Playgroud)

我想在这里显示的是服务对象,无论是作为Borg还是Singleton实现,都有一个非常重要的内部状态(它提供了一些基于它的服务)(我的意思是它必须是有用的东西,它不是Singleton/Borg只是为了有趣).

而且这个州必须被引入.这里的Singleton实现更直接,因为我们将init视为全局状态的设置.我发现Borg对象必须查询其内部状态以查看它是否应该自行更新.

你拥有的内部状态越多,情况就越糟糕.例如,如果对象必须侦听应用程序的拆除信号以将其寄存器保存到磁盘,那么该注册也应该只执行一次,使用Singleton会更容易.

python singleton

74
推荐指数
5
解决办法
2万
查看次数

是否可以在Enum中定义类常量?

Python 3.4引入了一个新模块enum,它为该语言添加了枚举类型.该文档enum.Enum提供了一个示例来演示如何扩展它:

>>> class Planet(Enum):
...     MERCURY = (3.303e+23, 2.4397e6)
...     VENUS   = (4.869e+24, 6.0518e6)
...     EARTH   = (5.976e+24, 6.37814e6)
...     MARS    = (6.421e+23, 3.3972e6)
...     JUPITER = (1.9e+27,   7.1492e7)
...     SATURN  = (5.688e+26, 6.0268e7)
...     URANUS  = (8.686e+25, 2.5559e7)
...     NEPTUNE = (1.024e+26, 2.4746e7)
...     def __init__(self, mass, radius):
...         self.mass = mass       # in kilograms
...         self.radius = radius   # in meters
...     @property
...     def surface_gravity(self):
...         # universal …
Run Code Online (Sandbox Code Playgroud)

python enums constants class-constants python-3.x

50
推荐指数
4
解决办法
8767
查看次数

Python类中的属性初始化/声明:放置它们的位置?

我想知道在Python中,在类的主体或__init__函数内部初始化对象属性的最佳实践是什么?

class A(object):
    foo = None
Run Code Online (Sandbox Code Playgroud)

VS

class A(object):
   def __init__(self):
       self.foo = None
Run Code Online (Sandbox Code Playgroud)

python attributes coding-style

44
推荐指数
1
解决办法
2万
查看次数

Python中函数的静态成员?

可能重复:
Python中的静态类变量
函数内部的静态变量的Python等价物是什么?

如何在Python中使用静态字段?

例如,我想计算函数被调用的次数 - 我该怎么做?

python static-members

24
推荐指数
2
解决办法
3277
查看次数

类变量在python中的所有实例之间共享?

我在一周前开始使用python进行编码,这是我的错误,我很快就开始使用oops,类和对象进行编码.我认为我的C++熟练程度会有所帮助....我得到了以下代码

class A:
     var=0
     list=[]
     def __init__(self):
            pass
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,var和list是有点全局变量,它似乎在所有实例中共享....我认为它在所有实例中都是不同的.....我花了半天才弄明白那....它没有任何意义,一个变量只能被一个类对象访问,但是在所有实例之间共享.......只是好奇,它背后有原因吗??? ??

python class global-variables instance-variables member

24
推荐指数
3
解决办法
3万
查看次数

python类属性

我有一个关于python中的类属性的问题.

class base :
    def __init__ (self):
        pass
    derived_val = 1

t1 = base()
t2 = base ()

t2.derived_val +=1
t2.__class__.derived_val +=2
print t2.derived_val             # its value is 2
print t2.__class__.derived_val   # its value is 3
Run Code Online (Sandbox Code Playgroud)

结果不同.我还使用id()函数来查找t2.derived_val和t2.class .derived_val有不同的内存地址.我的问题是derived_val是class属性.为什么上面的例子有所不同?是因为类的实例在类属性旁边复制了自己的derived_val吗?

python attributes class

17
推荐指数
1
解决办法
2万
查看次数

在python中是否有类中的静态块

我对python比较陌生我想为一个类只运行一次代码块.就像java中的静态块一样.

例如:

class ABC:
    execute this once for a class.
Run Code Online (Sandbox Code Playgroud)

python中有没有这样的选项?

在java中我们这样写.在加载类时,只对类执行一次.不是每个对象创建

public class StaticExample{
    static {
        System.out.println("This is first static block");
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

python static block

14
推荐指数
2
解决办法
4912
查看次数