在 __init__ 下声明的普通变量

Normal variables declared under __init__

在下面的示例中,我使用我的 class,Classy 声明了一个对象 obj1。 初始化 obj1 时,我使用 self.var 声明一个变量,并且我有一个可以打印到控制台的实例对象。一切顺利。

我的问题是关于我设置的另一个变量,named variable。 运行 我的代码没有产生任何错误,但我(似乎)无法访问它。既不是Classy的class变量,也不是obj1的实例变量。

变量在哪里?

class Classy:

    def __init__(self, value):
        self.var = value
        variable = 1


obj1 = Classy("object")
print(obj1.var)

object

变量 variable 作用域为函数。当你从函数中 return 时,它就消失了。

您的名为 variable 的变量是一个局部变量。具体来说,它是 __init__() 方法的局部变量。您将无法在该方法之外访问它。您只能在方法内部访问它。在 __init__() 方法内部创建的局部变量实际上仅用于创建其他实例变量的目的:

class Classy:

    def __init__(self, value):
        self.var = value
        variable = 1
        self.new_var = variable + 1 # new_var is 2


obj1 = Classy("object")
print(obj1.var)

属性“variable”是一个局部属性,您只能在 __init__() 方法内部访问。实际上,如果您修改 class 添加“print(locals)”

class classy:

def __init__(self,value):
    self.var = value
    variable = 1
    print(locals())

你可以看到这个属性存在于方法内部。但是如果你得到你的 class 的一个实例然后写

c = classy(10)
print(c.__dict__)

print(dir(c))

您可以看到实例范围内没有声明“变量”。所以,“variable”仍然是一个动态属性,因为你把它写在一个方法里面(它不是静态的)但是它和“var”的区别是你只能在 init 内部使用“variable” () 方法。

你可以试试写

class classy:
    
    def __init__(self,value):
        self.var = value
        variable = 1
        
    def __increment__(self):
        self.var +=variable

c = classy(10)
c.__increment__() # NameError: name 'variable' is not defined

发现您不能在同一个 class 的另一个方法中使用它。