간단한 전략 디자인 패턴에 관해 더 많은 디자인 성격의 질문이 있습니다.파이썬 인터페이스와 자기 instanciation
내가 인터페이스를 가지고 있다고하자 :
class RenewInterface:
def __init__(*args, **kwargs):
self.var1 = {}
self.var2 = []
if args:
for i in args:
inst = i()
self.var1[inst.__class__.__name__] = inst
@abstractmethod
def renew(*args, **kwargs)
Do some stuff and call renew in self.var1[inst__class__.__name__]
class ChildClass(RenewInterface):
def __init__(*args, **kwargs):
super(ChildClass, self).__init__(*args, **kwargs)
def renew(self, *args, **kwargs)
Do more stuff
내가 그 클래스에서 상속 내가 선택하는 경우 슈퍼 __init__
(위의 코드)를 호출 할 수 있습니다. args가 없다면 var1
과 var2
을 자식 클래스에만 노출 시키지만 어떤 이유로 args가 있고 부모 (RenewInterface)를 super(ChildClass, self).__init__(*args, **kwargs)
이라고하고 어떤 이유로 arg가 ChildClass의 클래스이면 ChildClass 자체를 인스턴스화하는 것 같아요?
- 건너가 슈퍼 클래스
- 가 ChildClass에 모두 함께
__init__
건너 뛰기 호출?하지만 그것은 인스턴스화 을 위해 다시 RenewInterface
__init__
를 사용 : 나는 슈퍼 클래스의 변수에 대한 상관 없어 이후에 OK입니다
나는 모든 것을 시험해 보았지만 모두 작동하지만, 가장 "불쾌한"방법은 무엇인지 모르겠습니다. 더 중요한 것은 2.6, 2.7 및 3.3 이상으로 다양합니까?
나는
감사
나는 당신이 무엇을하려고하는지 전혀 모른다. 그래서 나는 당신의 질문에있는 작은 질문들에 대답 할 것이다 : 1) _ "arg가 스스로의 문자열 클래스라면, 나는 그 자체로부터 ChildClass를 instanciate하겠습니까?" _ "자기 자신의 현악기"란 무엇을 의미합니까? 그리고, 그건 아무것도 인스턴스화하지 않습니다. 클래스가 _ 문자열로 끝나면 오류가 발생합니다. 2) _ "수퍼 클래스의 변수는 신경 쓰지 않기 때문에 OK입니다."_ 아니요, 좋지 않습니다. 부모 클래스의 변수에 신경 쓰지 않는다면 부모 클래스에서 상속해서는 안됩니다. –
arg가 클래스 ChildClass 인 경우 거기에 오타가 있었으며, 문자열이 너무 적었습니다. 위의 코드는 더 많은 sudo 코드이며 작업 코드를 최소한으로 표현한 것입니다. 비록 변수에 대해 신경 쓰지 않는다고해도 확실히 이것들이 전략 패턴의 기본을 구성하는 방법에 신경 써야합니다 (내가 보았 듯이) – JoYiDer