相关疑难解决方法(0)

静态类变量是否可能?

是否有可能在python中有静态类变量或方法?这样做需要什么语法?

python oop static class class-variables

1824
推荐指数
20
解决办法
114万
查看次数

python中静态变量和实例变量之间的差异.他们甚至存在吗?

随机类定义:

class ABC:
    x = 6
Run Code Online (Sandbox Code Playgroud)

首先为abc实例设置一些值,稍后为静态变量设置一些值:

abc = ABC()
abc.x = 2
ABC.x = 5
Run Code Online (Sandbox Code Playgroud)

然后打印结果:

print abc.x
print ABC.x
Run Code Online (Sandbox Code Playgroud)

打印

2
5
Run Code Online (Sandbox Code Playgroud)

现在,我真的不知道发生了什么,因为如果我在类定义x = 6中替换"pass",它将只输出相同的东西.我的问题是,在python的类定义中定义变量的目的是什么,如果看起来我可以随时设置任何变量而不这样做?

另外,python是否知道实例和静态变量之间的区别?从我所看到的,我会这样说.

python

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

复合赋值给Python类和实例变量

我一直在努力理解Python对类和实例变量的处理.特别是,我发现这个答案很有帮助.基本上它说如果你声明一个类变量,然后你做一个赋值[instance].property,你将完全分配一个不同的变量 - 一个与类变量不同的命名空间.

所以我考虑过 - 如果我希望我的类的每个实例都有一个默认值(比如零)的成员,我应该这样做:

class Foo:
    num = 0
Run Code Online (Sandbox Code Playgroud)

或者像这样?

class Foo:
    def __init__(self):
        self.num = 0
Run Code Online (Sandbox Code Playgroud)

基于我之前读过的内容,我认为第二个例子是初始化'right'变量(实例而不是类变量).但是,我发现第一种方法也非常有效:

class Foo:
    num = 0

bar = Foo()
bar.num += 1 # good, no error here, meaning that bar has an attribute 'num'
bar.num
>>> 1
Foo.num
>>> 0 # yet the class variable is not modified! so what 'num' did I add to just now?
Run Code Online (Sandbox Code Playgroud)

那么..为什么这个有效?我得不到什么?FWIW,我之前对OOP的理解来自C++,因此通过类比(或指向它发生故障)的解释可能是有用的.

python class

5
推荐指数
1
解决办法
5942
查看次数

Python类变量或类变量一般

从Dive到Python:

通过直接引用类和类的任何实例,都可以使用类属性.

类属性可以用作类级常量,但它们不是真正的常量.你也可以改变它们.

所以我把它输入IDLE:

IDLE 2.6.5      
>>> class c:
        counter=0


>>> c
<class __main__.c at 0xb64cb1dc>
>>> v=c()
>>> v.__class__
<class __main__.c at 0xb64cb1dc>
>>> v.counter += 1
>>> v.counter
1
>>> c.counter
0
>>> 
Run Code Online (Sandbox Code Playgroud)

那么我做错了什么?为什么类变量不通过直接引用类和类的任何实例来维护其值.

python oop

1
推荐指数
1
解决办法
285
查看次数

标签 统计

python ×4

class ×2

oop ×2

class-variables ×1

static ×1