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

时间:2015-07-17 01:35:43

标签: python variables initialization

我来自MATLAB背景。当我创建类定义时,我可以实例化"空"变量名称,然后为它们分配值或对象。即

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()

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

请帮助。

2 个答案:

答案 0 :(得分:10)

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

我认为你不能在python中有一个未初始化的名称,而是为什么不将你的实例变量初始化为None?示例 -

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

您可以稍后将其设置为您想要的任何内容 -

a = myClass()
a.var1 = someOtherClassObject

如果需要定义类变量(跨实例共享),则需要在__init__()方法之外定义它们,直接在类中定义 -

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

答案 1 :(得分:0)

没有&#34;单元化变量&#34;在Python中,就像在MATLAB中一样,因为它们不是必需的。如果您想稍后将变量添加到类实例,只需添加它们:

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

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

>>> 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中执行它,你只需要这样做。

从技术上讲,它们不是&#34;变量&#34;,在Python中它们被称为&#34;属性&#34;在MATLAB中,它们被称为&#34;属性&#34; (Python有一些称为属性的东西,但它们与MATLAB中的属性不同)。