이것은 아마도 너무 일반적인 질문 일 뿐이지 만 여전히 귀찮습니다. 일반적으로, 더 나은 방법은 무엇입니까? (그리고 왜) : 기본 클래스를 프록시 처리하거나 서브 클래 싱하는 것입니까? base 보통 표준 클래스 중 하나를 의미합니다. 표준 클래스는 대개 Python으로 구현되지 않습니다.기본 클래스를 프록 싱하거나 하위 클래스 화 하시겠습니까?
더 구체적인 질문은 다음과 같습니다. 그래프 가장자리에 대한 개체를 만들고 싶습니다. 그래프 엣지는 본질적으로 두 개의 정점 쌍입니다. 버텍스는 임의의 해시 가능 객체 일 수있다. 나는 가장자리가 frozenset
노출보다 더 많은 방법을 폭로하기를 바랍니다. 그래서 내가
class Edge(object):
def __init__(self, *args):
self._frozenset = frozenset(*args)
def __len__(self):
return len(self._frozenset)
def ...
첫 번째 방법의 장점
class Edge(frozenset):
def my_method(self, *args):
return 3
또는
내가 덜 쓸 필요가 있다는 것입니다 여부를 궁금해 (나는 모든 원래의 방법을 복제 할 필요가 없기 때문에). 그러나 두 번째 방법은 어떤면에서는 더 안전 해 보입니다. 그것은 또한 더 융통성이 있기 때문에, 내가 원한다면 과 같은frozenset
이 노출하는 몇 가지 방법을 피할 수 있기 때문에 더 유연합니다.
첫 번째 방법은 전달 된 인수의 개수와 관련된 문제도 발생시킵니다. 그걸 제어하고 싶다면 아마 frozenset.__new__
을 덮어 써야합니다. 다른 한편, 첫 번째 방법은 아마도 프록시가 약간의 오버 헤드를 발생시키기 때문에 일반적으로 더 빠를 것입니다.
중요한지는 잘 모르겠지만 대개 Python 2.7로 작성합니다.
감사합니다. 그러나 나에게 이것은 분명하지 않다. 좀 더 추상적 인 생각을 가진 사람들은'if edge1() & edge2()'(예를 들어'edge1'과'edge2'는 집합과 같이 교차)와 같은 것을 검사 할 수 있기를 원합니다. – Bach
어쨌든, 저에게 가장자리 **는 불변의 집합입니다. 아직도'frozenset'을 서브 클래스 화하는 것에는 꽤 많은 소란이 있습니다. 그래서 이것이 올바른 일이라는 것을 확신하지 못합니다. – Bach
그럼 그냥 세트라면, 세트를 사용하십시오. 특별한 의미 나 기능이 필요하지 않은 경우에도 왜 자신 만의 클래스를 만들까요? – bgusach