我来自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()
但这不正确。主要目的是构建我的类的定义,如结构,然后根据需要去实例化变量。
请帮助。
答案 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中的属性不同)。