2010-06-14 1 views
1

에서 나는 일종의 파이썬의 새로운 그리고 난 PHP의 마술 방법 같은 것을 만들 수있는 방법이 있는지 궁금합니다 (http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methods)매직 방법은 파이썬

내 목표는에서 자식 클래스의 접근을 용이하게하는 것입니다 내 모델. 기본적으로 n 개의 하위 클래스가있는 부모 클래스가 있습니다. 이러한 클래스에는 언어 키, 변환 키 및 변환 값의 세 가지 값이 있습니다. 이 말은 일종의 일반적인 번역 처리를 설명합니다. 부모 클래스는 서로 다른 언어로 각각 다른 번역 키에 대한 번역을 가질 수 있습니다. 예 : 키 "제목"은 독일어와 영어로 번역 할 수 있으며 키 "설명"도 마찬가지입니다 (지금까지 등등)

나는 하위 클래스를 가져오고 설정 값으로 필터링하고 싶지 않습니다. 명시 적으로는 아니지만 마술 방법 뒤에있는 구체적인 구현이이를 수행 할 것입니다.) 내가 전화하기를 원한다.

parent_class.title['de'] 
# or also possible maybe 
parent_class.title('de') 

독일어 (de)로 번역하기.

따라서 호출 된 메서드의 이름과 매개 변수 (PHP와 같은)를 취하는 마법 메서드가 있어야합니다. 지금까지 내가 파이썬을 파고 들었을 때 이것은 간단한 속성 (__getattr__, __setattr__) 또는 설정/클래스 (__getitem__, __setitem__) 내에서 직접 얻는 것만으로 가능했다. 둘 다 내 필요에 맞지 않는다.

어쩌면 해결책이 있습니까? 도와주세요! 미리 감사드립니다.

답변

4

__getitem__ 메서드가있는 parent_class.title에 대한 객체를 반환합니다.

class parent_class: 
    def __init__(self): 
     self.title = multilang("hello world"); 

class multilang: 
    def __init__(self, text): 
     pass 
    def __getitem__(self, key): 
     if key == 'en': 
      return "hello world"; 
+0

잘 작동 것, 그게 내가 생각하지 않은 솔루션,하지만 내가 언급하지 않았다 다른 환경 사실을 고려해야로 내 요구이며 매우 좋은 적합 감사합니다! – dArignac

1

코드를 parent_class['de'].title으로 리팩토링 할 수 있습니다. ) 그리고 이런 일이 probaly

from collections import defaultdict 

class X(object): 
    def __init__(self, title = "", description = ""): 
     self.title = title 
     self.description = description 

parent_class = defaultdict(X) 

parent_class['en'] = X("title", "description") 
parent_class['de'].title = "Titel" 
+0

좋은 해결책이지만 유감스럽게도 내 환경에서는 불행히도 작동하지 않습니다. 그러나 어쨌든 당신을 감사하십시오! – dArignac