Python List.append用最新的元素替换所有元素
我有一个节点类,其中有一个名称和一个数组,还有一个Graph类,它应该有一个节点对象数组: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
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()相同。
谢谢!如果有人偶然发现这个。