2013-07-12 4 views
0

유일한 가치는 속성을 저장하는 것입니다. 그렇다면 그 변경 사항은 변경 될 수 없으며 변경 사항은 모든 인스턴스에 반영됩니다!파이썬 클래스에는 어떤 장점이 있습니까?

여기 클래스가있는 경우 :

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

새로운 정점 오브젝트합니다

v = Vertex() 

및 V의 outedges에 추가 :

다음
v.outEdges.append(1) 

Vertex.outEdges을 더 이상 빈 목록이 아니며 1을 포함합니다.

그래서 파이썬 클래스는 어떻게 사용해야합니까? 복사 모듈로? 전혀?

+2

왜 당신이 사용하는 클래스가 여기에 속성을? 데이터가 단일 인스턴스에만 적용되어야하는 경우 인스턴스의 일부로 만드십시오. – geoffspear

+2

클래스 속성이 모든 인스턴스에 반영되도록합니다. – Matthias

답변

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 
+0

좋습니다, 감사합니다. 알아 둘만한. – NargothBond

2

당신은 instantiation method가 필요합니다.

class Vertex: 
    def __init__(self): 
     self.label = str() 
     .... 
1

[..] 변경 사항이 모든 인스턴스에 반영된다!

속성을 정의한 경우 지정된 클래스의 모든 인스턴스에서 공유되는 정적 속성으로 작동합니다.

당신이 그런 식으로 그것을 정의 할 필요가 값 속성을 공유하지 않는 지정된 클래스의 인스턴스를 원한다면 :

# Vertex 
class Vertex: 
    def __init__(self): 
     self.label = str() 
     self.ID = int() 
     outEdges = list() 
     inEdges = list() 
관련 문제