除了名字,这两个班还有什么区别吗?
class WithClass ():
def __init__(self):
self.value = "Bob"
def my_func(self):
print(self.value)
class WithoutClass ():
value = "Bob"
def my_func(self):
print(self.value)
如果我使用或不使用__init__
方法来声明变量value
,这有什么区别吗?
我主要担心的是我会用一种方式,当这会给我带来更多的问题。
Tags:
在
__init__
外部设置的变量属于该类。它们被所有实例共享。在
__init__
(和所有其他方法函数)内创建并以self.
开头的变量属于对象实例。我想在这个线程和this thread(引用这个线程)中读取的响应中添加一些内容。
免责声明:这些评论来自于我所做的实验
变量在
__init__
之外:实际上,这些是静态类变量,因此可以访问类的所有实例。
变量在
__init__
中:这些实例变量的值只能访问手头的实例(通过
self
引用)我的贡献:
程序员在使用静态类变量时必须考虑的一件事是,它们可以被实例变量隐藏(如果您通过
self
引用访问静态类变量)。说明:
以前,我认为声明变量的两种方法完全相同(我真傻),部分原因是我可以通过
self
引用访问这两种变量。现在,当我遇到麻烦时,我研究了这个话题并把它弄清楚了。通过
self
引用是指如果没有同名的实例变量,它只引用静态类变量,并且使事情变得更糟,试图通过self
引用重新定义静态类变量不起作用,因为创建了一个实例变量,该变量将隐藏以前可访问的静态类变量。为了解决这个问题,您应该始终通过类的名称引用静态类变量。
示例:
输出:
我希望这对某人有帮助
没有自我
创建一些对象:
我可以更改c1实例,它不会影响c2实例:
但如果我更改foo类,则该类的所有实例也将更改:
请注意Python作用域是如何工作的:
自我
更改类不会影响实例:
相关问题 更多 >
编程相关推荐