python中的以下代码声明有什么区别

  • 本文关键字:区别 声明 代码 python python
  • 更新时间 :
  • 英文 :


在python中,如果我在任何类方法之外使用变量,它可以在其他方法中使用,如果我将init方法与self一起使用,它基本上可以做同样的事情(或者看起来)任何人都可以解释它们之间的区别。 以及何时适合使用其中任何一种方法

class gaurab():
value1=1
value2=2
value3=3
values=gaurab()
class something():
def __init__(self):
self.value1=1
self.value2=100
def p(self):
print self.value1
svalues=something()
print values.value1
print svalues.p()

直接在类中声明的属性称为类属性。 就像在你的例子中一样(尽管缩进和一些语法是错误的),value1、value2 和 value3 是类 gaurab 的类属性。

在其他属性中声明的属性是实例属性,并绑定到在其中声明它们的类属性。 就像 value1 和 value2 变量绑定到类中初始化一样。

类属性与静态类型语言中的静态变量(如C++、JAVA等)进行比较。 类属性由类的所有实例共享,因此只创建此类属性的一个副本(与实例属性不同,其中类的每个实例都有自己的实例变量副本)。

当创建类something的实例时,将执行something__init__方法,在其self参数中接收新实例。此方法创建两个实例属性:value1value2。然后将此实例分配给实例变量,因此它绑定到具有这两个实例属性的事物。

例如:

class foo:
def __init__(self):
self.Alist=[]    #It is an instance attribute
Blist=[]             #It is a class attribute

对于这个类定义,当我们创建 2 个类实例时:

var1 = foo()
var2 = foo()

Blist属性由var1var2共享Alist但两者的属性不同。因此,如果我们执行以下操作:

var1.Alist.append(1)
var1.Blist.append(10)
var2.Alist.append(2)
var2.Blist.append(20)

的输出

print(var1.Alist)
print(var1.Blist)
print(var2.Alist)
print(var2.Blist)

将是 :

[1]
[10]
[2]
[10,20]

这是因为Blist变量由var1var2共享,因此,var1.Blist的变化会影响var2.Blist,反之亦然。 但是,var1.Alistvar2.Alist是相互独立的。

因此,如果您希望一个属性对于类的所有实例都是通用的,则可以将其声明为类属性(如果不是经常需要的),则可以将其声明为实例属性。

最新更新