如何在 python 中的 class 定义中声明未初始化的变量

how to declare uninitialized variable in class definition in python

我有 MATLAB 背景。当我创建 class 定义时,我可以实例化 "empty" 变量名称,然后为它们分配值或对象。 IE。


classdef myclass < handle

    properties
        var1
        var2
    end 
end

a = myClass;
a.var1 = someOtherClassObject;

如何在 Python 中执行此操作?我试过这样的事情:

class myClass:
def __init__(self):
    var1 
    var2

a = myClass()
a.var1 = someOtherClassObject()

但这是不正确的。主要目的是构建我的class的定义,就像一个结构,然后根据需要去实例化变量。

将不胜感激。

您需要使用self.为实例(对象)创建变量

我认为您不能在 python 中使用未初始化的名称,为什么不直接将您的实例变量初始化为 None 呢?例子-

class myClass:
    def __init__(self):
        self.var1 = None 
        self.var2 = None

您稍后可以使用 -

将它们设置为您想要的任何值
a = myClass()
a.var1 = someOtherClassObject

如果您需要定义 class 变量(跨实例共享),您需要在 __init__() 方法之外定义它们,直接在 class 内部定义为 -

class myClass:
    var1 = None
    var2 = None
    def __init__(self):
        pass

在 Python 中没有像在 MATLAB 中那样的 "unitialized variables" 之类的东西,因为它们不是必需的。如果你想稍后将变量添加到 class 实例,只需添加它们:

>>> class myclass:
>>>     pass
>>> 
>>> a = myclass()
>>> a.var1 = 5
>>> a.var1
5

您也可以将它们直接添加到 class,这样它们就会出现在 class 的所有实例中。这也会将它们添加到之前创建的 class 的实例中,因此如果您不小心,可能会很危险:

>>> class myclass:
>>>     pass
>>> 
>>> a = myclass()
>>> a.var1
AttributeError: 'myclass' object has no attribute 'var1'
>>>
>>> myclass.var1 = 5
>>> a.var1
5

您不想在 MATLAB 中执行此操作,因为您必须先使用 addprop 添加它,这是不必要的复杂性。 Python 在很多情况下是比 MATLAB 更动态的语言。在 Python 中,您无需初始化某些东西,然后执行它。

从技术上讲,它们不是 "variables",在 Python 中,它们称为 "attributes",在 MATLAB 中,它们称为 "properties"(Python 具有称为属性的东西, 但它们与 MATLAB 中的属性不同)。