2012-06-27 5 views
3

사과하지 않으면 이해가되지 않는다. 나는 경험 많은 프로그래머가 아니다. ...... 난 그냥 MyClass에의 한 classInstance를 사용하고자하는 경우파이썬 모듈에서 상속 vs 클래스 인스턴스 가져 오기

from mymodule import classInstance 

class MyClass(classInstance): 
    def __init__(self): 
     pass 

, 그것은 특정을 가져올 괜찮 다음

import mymodule 

class MyClass: 
    def __init__(self): 
     self.classInstance = myModule.classInstance() 

과 :

다음 코드를 고려 클래스를 상속 받아 MyClass가이 클래스를 상속 받습니까?

모범 사례가 있습니까? 아니면 두 가지 방법을 결정할 때 고려해야 할 사항이 있습니까?

많은 감사

+3

이것은 OOP 관련 질문입니다. ** isa vs hasa ** 용 Google. [또한 이것을 확인하십시오] (http://stackoverflow.com/questions/453738/inheritance-or-composition-rely-on-is-a--has-a) – tuxuday

+0

고마워,이 많이 도움이 – Sherlock

답변

6

다른 예를 제안 해주세요.

Vector 클래스가 있다고 상상해보십시오. 이제 Point 클래스가 필요합니다. 포인트는 벡터로 정의 할 수 있지만 Vector에없는 다른 추가 기능이있을 수 있습니다. 이 경우 Vector에서 Point를 파생시킵니다.

이제 Line 클래스가 필요합니다. 라인은 위의 클래스 중 하나의 특수화가 아니므로 그 중 하나에서 파생되기를 원하지 않을 것입니다. 그러나 선은 점을 사용합니다.

class Point(Vector): 
    def __init__(self): 
     Vector.__init__(self) 

그래서 대답은 정말 :

class Line(object): 
    def __init__(self): 
     self.point1 = Point() 
     self.point2 = Point() 

는 점이이 같은 것입니다 :이 경우는 라인 클래스 이런 식으로 시작 할 수 있습니다 당신이해야 할 일을 따라 다르지만, 당신이 코딩하고있는 것에 대해 명확한 생각을 가지고있을 때, 하위 분류를 선택하는 것보다 명확하지 않게 선택하는 것입니다.

도움이 되었기를 바랍니다.

0

당신은 당신이 그 두 가지 접근 방법 "사이에서 선택"하려는 같은 소리 만들기,하지만 그들은 완전히 다른 일을. 두 번째 클래스는 classInstance이라는 클래스에서 상속받은 클래스를 혼동스럽게 정의합니다. 첫 번째 인스턴스는 MyClass (obect 유형을 제외한 다른 것에서 상속되지 않음)이라는 클래스를 정의합니다. 이라는 인스턴스 변수는 classInstance 클래스의 인스턴스로 설정됩니다.

왜 클래스 이름을 classInstance입니까?

+0

두 예제 위의 코드는 classInstance에 대한 MyClass 액세스를 제공합니다. 내 질문은, 어느 쪽이 가장 좋고 어떤 상황에 처한 것입니까? – Sherlock

+0

아닙니다. MyClass는 classInstance라는 * 클래스 *에 상속에 의한 액세스를 제공합니다. MyClass는'classInstance'의 * instance *에 속성을 통해 접근합니다. – BrenBarn

관련 문제