似乎他们唯一的价值就是存储属性。即便如此,这些都无法改变,或者所有实例都会反映出这些变化!
如果我在这里上课:
# Vertex
class Vertex:
label = str()
ID = int()
outEdges = list()
inEdges = list()
制作一个新的顶点对象:
v = Vertex()
并添加到v的outedges:
v.outEdges.append(1)
然后Vertex.outEdges不再是空列表,而是包含1。
那么我应该如何使用python类?有了复制模块吗?完全没有?
答案 0 :(得分:6)
您声明的属性是类级别的,并且由类的所有实例共享。如果希望这些值特定于实例,则需要使用正确的初始化程序/构造函数:
# Vertex
class Vertex:
def __init__(self):
self.label = str()
self.ID = int()
self.outEdges = list()
self.inEdges = list()
您还可以在类上创建方法,而不仅仅是属性。
class Vertex:
# def __init__(self): ...
def allEdges(self):
return self.outEdges + self.inEdges
答案 1 :(得分:2)
如果你想要不同的班级实例,你需要一个instantiation method。
class Vertex:
def __init__(self):
self.label = str()
....
答案 2 :(得分:1)
[..]更改会反映在所有实例中!
如果像您一样定义属性,它们将表现为在给定类的所有实例之间共享的静态属性。
如果你想获得不共享属性值的给定类的实例,你需要像这样定义它:
# Vertex
class Vertex:
def __init__(self):
self.label = str()
self.ID = int()
outEdges = list()
inEdges = list()