装饰的功能@staticmethod和装饰的功能有什么区别@classmethod?
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?
为什么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 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中,在类的主体或__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进行编码,这是我的错误,我很快就开始使用oops,类和对象进行编码.我认为我的C++熟练程度会有所帮助....我得到了以下代码
class A:
var=0
list=[]
def __init__(self):
pass
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,var和list是有点全局变量,它似乎在所有实例中共享....我认为它在所有实例中都是不同的.....我花了半天才弄明白那....它没有任何意义,一个变量只能被一个类对象访问,但是在所有实例之间共享.......只是好奇,它背后有原因吗??? ??
我有一个关于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比较陌生我想为一个类只运行一次代码块.就像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 ×10
attributes ×2
class ×2
block ×1
coding-style ×1
constants ×1
enums ×1
member ×1
methods ×1
oop ×1
python-3.x ×1
singleton ×1
static ×1