Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类中的数组未初始化_Python - Fatal编程技术网

Python 类中的数组未初始化

Python 类中的数组未初始化,python,Python,我是python新手,正在努力学习。 问题 我被困在一个地方,在那里我初始化了循环中一个类的对象。在初始化过程中,我希望得到一个全新的对象,它的所有属性都重置了。但当类具有数组列表时,就不会发生这种情况。 示例如下: Class-MyClass: id=“” aList=[] Class SecondClass:#忽略其内容 pid=“” anObj=MyClass() sc1=第二类() anobj.append(sc1) print str(len(anObj.aList)#给出输出1 an

我是python新手,正在努力学习。 问题 我被困在一个地方,在那里我初始化了循环中一个类的对象。在初始化过程中,我希望得到一个全新的对象,它的所有属性都重置了。但当类具有数组列表时,就不会发生这种情况。 示例如下:
Class-MyClass:
id=“”
aList=[]
Class SecondClass:#忽略其内容
pid=“”
anObj=MyClass()
sc1=第二类()
anobj.append(sc1)
print str(len(anObj.aList)#给出输出1
anObj=MyClass()#重新调整对象的斜体,因此我希望在java的行中得到一个空类
print str(len(anObj.aList)#给出输出1,为什么我刚刚重新初始化了对象“anObj”
您将静态属性与实例属性混淆了。您应该这样做:

Class MyClass:
    def __init__(self):
        self.id = ""
        self.aList = []
基本区别在于,在您的实现中,
aList
属性对于
MyClass
的所有实例都是相同的。这就是为什么我们称它们为静态的原因,因为它们不会随实例的不同而变化。相反,上面定义的实例变量对于您创建的每个新实例都是唯一的。

Y您将静态属性与实例属性混淆。您应该改为:

Class MyClass:
    def __init__(self):
        self.id = ""
        self.aList = []

基本区别在于,在您的实现中,
aList
属性对于
MyClass
的所有实例都是相同的。这就是为什么我们称它们为静态的原因,因为它们不会随实例的不同而变化。相反,上面定义的实例变量对于您创建的每个新实例都是唯一的。

T这是对python的一个非常普遍的误解……实际上,
MyClass.aList
是一个“静态”成员。理解这一点的关键是理解python如何查找对象的属性

首先,python查看属性的实例。如果它不在那里,则python会向上移动一个级别(到类)并在那里查找属性。如果它不在类上,则会查看基类(按照“方法解析顺序”)

因此,这(希望如此)解释了问题。您创建了
MyClass
的一个实例,并获得对其列表的引用:

c = MyClass()
lst = c.aList
现在,请注意,
c.aList
MyClass.aList
,因为
c
本身没有
aList
属性

print(lst is MyClass.aList)  # True

那么,我们如何解决这个问题呢?典型的解决方法是在初始化时将
aList
属性绑定到实例:

class MyClass(object):
    def __init__(self):
        self.aList = []

现在,
MyClass
没有
aList
成员,但它的所有实例都将(并且它们的成员都将是不同的)。

这是对python的一个非常常见的误解……实际上,
MyClass.aList
是一个“静态的”理解这一点的关键是理解python如何查找对象的属性

首先,python查看属性的实例。如果它不在那里,则python会向上移动一个级别(到类)并在那里查找属性。如果它不在类上,则会查看基类(按照“方法解析顺序”)

因此,这(希望如此)解释了问题。您创建了
MyClass
的一个实例,并获得对其列表的引用:

c = MyClass()
lst = c.aList
现在,请注意,
c.aList
MyClass.aList
,因为
c
本身没有
aList
属性

print(lst is MyClass.aList)  # True

那么,我们如何解决这个问题呢?典型的解决方法是在初始化时将
aList
属性绑定到实例:

class MyClass(object):
    def __init__(self):
        self.aList = []
现在,
MyClass
没有
aList
成员,但是它的所有实例都会有(并且它们的成员都是不同的)