如何在 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 中的属性不同)。
我有 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 中的属性不同)。