Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 List.append用最新的元素替换所有元素_Python_List - Fatal编程技术网

Python List.append用最新的元素替换所有元素

Python List.append用最新的元素替换所有元素,python,list,Python,List,我有一个节点类,其中有一个名称和一个数组,还有一个Graph类,它应该有一个节点对象数组: class Node: name = "" next = [] class Graph: nodes = [] # nodes is an array consisting of Node objects 我创建了一个函数,当传递一个字符串时,它会将一个节点对象追加到图形中 def add_new(self, new_name): new_node = No

我有一个节点类,其中有一个名称和一个数组,还有一个Graph类,它应该有一个节点对象数组:

class Node:
    name = ""
    next = []

class Graph:
    nodes = [] # nodes is an array consisting of Node objects 
我创建了一个函数,当传递一个字符串时,它会将一个节点对象追加到图形中


def add_new(self, new_name):
        new_node = Node
        new_node.name = new_name
        self.nodes.append(new_node)
        print("New node given name: ", new_name)
        print("New length of nodes: ", len(self.nodes))

graph2 = Graph

add_new(graph2, "Jim")
add_new(graph2, "Dwight")
add_new(graph2, "Andy")

print("Node names: ")
for i in range(0,3):
    print(graph2.nodes[i].name)
该函数似乎用最新的新\u节点对象替换节点数组中以前的所有元素,而不是实际附加新的\u节点

python -u "c:\Users\Vishnu\CS-Project\why.py"
New node given name:  Jim
New length of nodes:  1
New node given name:  Dwight
New length of nodes:  2
New node given name:  Andy
New length of nodes:  3
Node names:
Andy
Andy
Andy

这是怎么发生的?new_node不是一个局部变量吗?它不应该在函数的每次迭代中都是新的吗?

在类级别设置的属性是静态的,也就是说,由类的所有实例共享。您可能想要:

类节点:
定义初始化(自):
self.name=“”
self.next=[]
类图:
定义初始化(自):
self.nodes=[]

另外,您需要调用类来实例化-因此您需要
new\u node=node()
graph2=Graph()

您需要实际实例化节点和图形类

class Node:
    def __init__(self, name):
        self.name = name

class Graph:

    def __init__(self):
        self.nodes = list()

    def add_new(self, new_name):
        new_node = Node(new_name)
        self.nodes.append(new_node)
        print("New node given name: ", new_name)
        print("New length of nodes: ", len(self.nodes))

graph2 = Graph()

graph2.add_new("Jim")
graph2.add_new("Dwight")
graph2.add_new("Andy")

print("Node names: ")
for i in range(0,3):
    print(graph2.nodes[i].name)
请记住,
self
是对类的对象实例化的引用。它是类定义的一部分,是python特有的语法

从类创建python对象,只需将
()
添加到类的末尾即可。在Java中,您还必须说
new

您可以这样定义一个类:

class Person():
    def __init__(self, some_var):
        self.some_var = some_var
    def some_method(self, msg):
        print("He said:", msg)
my_person = Person('my_var')
my_person.some_method('FooBar')
然后根据它创建一个对象,如下所示:

class Person():
    def __init__(self, some_var):
        self.some_var = some_var
    def some_method(self, msg):
        print("He said:", msg)
my_person = Person('my_var')
my_person.some_method('FooBar')
然后您可以在其中使用如下方法:

class Person():
    def __init__(self, some_var):
        self.some_var = some_var
    def some_method(self, msg):
        print("He said:", msg)
my_person = Person('my_var')
my_person.some_method('FooBar')

new\u node=node()
中似乎缺少括号。与
Graph()相同。
谢谢!如果有人偶然发现这个。