2013-10-22 3 views
0

KV 데이터 저장소에 클래스를 만들고 개체를 만들고 있다고 가정합니다. 생성자를 생성하는 것은 매우 간단합니다 ...클래스 메서드에서 구성

class KVObject: 
    def __init__(self, key, value, add=True): 
     self.key = key 
     self.value = value 
     if add == True: 
      kv_create(key, value) 

이제 KV- 개체를 검색하고 클래스 인스턴스를 생성한다고 가정 해 봅시다. 이 클래스 메소드를 DataBaseObject 클래스에 추가하겠습니다.

 @classmethod 
    def get_kv_object(cls, key): 
     value = kv_get(key) 
     cls.__init__(key, value, add=False) 

...하지만 클래스 메소드에서 초기화를 호출 할 때 (CLS .__ init__), 파이썬은 자기에 대한 인수를 요청합니다!

아이디어가 있으십니까? 많은 감사합니다! 나는 이것이 약간 간단한 예제라는 것을 알고 있지만, 좀 더 복잡하고 흥미로운 상황에 확실히 적용됩니다!

: 감사합니다. 이 객체를 조사하는 동안 도움이되는 것을 배웠습니다 .____ new__는 MyClass (...)를 호출 할 때 객체에서 __init__을 호출하여 효과적으로 클래스의 초기화되지 않은 인스턴스를 MyClass에 제공합니다. 과 MyClass에서 args가 호출됩니다. 마찬가지로 답안에서 제안하는 것처럼 cls (...)를 호출하는 것이 좋습니다. 고맙습니다.

답변

1
@classmethod 
def get_kv_object(cls, key): 
    value = kv_get(key) 
    return cls(key, value, add=False) 

__init__하지cls 클래스의 새로운 인스턴스를 생성한다! 그것은 객체가 생성 된 직후에 호출되는 메소드입니다.

2

은 같은 것, 당신이 일반적으로 새 데이터베이스 객체를 생성 할 방법에 대해 생각 다음 클래스 메소드 내 잘

instance = DatabaseObject(key, value, add=False) 

(이 경우 cls) 첫 번째 매개 변수하기위한 또 다른 이름입니다 , 인스턴스를 만들려면 다음을 수행하십시오.

instance = cls(key, value, add=False) 
관련 문제