0

似乎它们唯一的价值是存储属性。即使那样,这些也无法更改,否则更改会反映在所有实例中!

如果我在这里上课:

# Vertex
class Vertex:
   label = str()
   ID = int()
   outEdges = list()
   inEdges = list()

制作一个新的顶点对象:

v = Vertex()

并添加到 v 的 outedges:

v.outEdges.append(1)

那么 Vertex.outEdges 不再是一个空列表,还包含 1。

那么我应该如何使用python类呢?使用复制模块?一点也不?

4

3 回答 3

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
于 2013-07-12T14:48:53.807 回答
2

如果您想要类的不同实例,则需要一个实例化方法。

class Vertex:
    def __init__(self):
        self.label = str()
        ....
于 2013-07-12T14:52:24.923 回答
1

[..] 更改会反映在所有实例中!

如果您像以前那样定义属性,它们将表现为在给定类的所有实例之间共享的静态属性。

如果要获取不共享属性值的给定类的实例,则需要像这样定义它:

# Vertex
class Vertex:
    def __init__(self):
        self.label = str()
        self.ID = int()
        outEdges = list()
        inEdges = list()
于 2013-07-12T14:54:42.060 回答