2017-04-26 9 views
0

잘 작동하는 메서드가 있지만 클래스 메서드를 원하지만 @classmethod 데코레이터를 사용하면 거기에있는 매개 변수가 누락되었다는 오류가 발생합니다. 적어도 나는파이썬에서 클래스 메서드 사용

이이 작업 코드와 그 결과입니다) 그것을 이해 :

company=Company() 
company_collection=company.get_collection('') 
for scompany in company_collection: 
    print(scompany.get_attrs()) 

class Entity(Persistent): 

    def get_collection(self, conditional_str): 
     subset=[] 
     collection=[] 
     subset=self.get_subset_from_persistant(self.__class__.__name__, conditional_str) 
     for entity in subset: 
      collection.append(self.get_new_entity(entity)) 

     return(collection) 

class Company(Entity): 
    pass 

MacBook-Pro-de-Hugo:Attractora hvillalobos$ virtual/bin/python3 control.py 
{'id': '1', 'razon_social': 'Attractora S.A. de C.V.', 'rfc': ' xxxxxxxx'} 
{'id': '2', 'razon_social': 'Otra empresa sa de cv', 'rfc': ' yyyyyyyy'} 
{'id': '3', 'razon_social': 'Una mas sa de vc', 'rfc': ' zzzzz'} 

이 그 결과에 실패한 하나

company_collection=Company.get_collection('') 
for scompany in company_collection: 
    print(scompany.get_attrs()) 

class Entity(Persistent): 

    @classmethod 
    def get_collection(self, conditional_str): 
     subset=[] 
     collection=[] 
     subset=self.get_subset_from_persistant(self.__class__.__name__, conditional_str) 
     for entity in subset: 
      collection.append(self.get_new_entity(entity)) 

     return(collection) 

class Company(Entity): 
    pass 

MacBook-Pro-de-Hugo:Attractora hvillalobos$ virtual/bin/python3 control.py 
Traceback (most recent call last): 
    File "control.py", line 14, in <module> 
    company_collection=Company().get_collection('') 
    File "/Users/hvillalobos/Dropbox/Code/Attractora/model.py", line 31, in get_collection 
    subset=self.get_subset_from_persistant(self.__class__.__name__, conditional_str) 
TypeError: get_subset_from_persistant() missing 1 required positional argument: 'conditional_str' 

내가의 이유를 찾을 수 없습니다 오류.

답변

0

클래스 메서드를 정의 할 때 첫 번째 인수는 cls이 아니라 self이되어야합니다. 그런 다음 같은 클래스에서 호출하면 self. get_subset_from_persistant(conditional_str)을 수행합니다.

클래스의 메서드를 호출 할 때 cls 또는 self 매개 변수를 제공 할 필요가 없습니다.

이 시도 :

class Entity(Persistent): 

    @classmethod 
    def get_collection(cls, conditional_str): 
     subset=[] 
     collection=[] 
     subset=self.get_subset_from_persistant(conditional_str) 
     for entity in subset: 
      collection.append(self.get_new_entity(entity)) 

     return(collection) 

class Company(Entity): 
    pass 
0

수업 방법은 서명의이 유형을 가져야한다. 그것은 즉, 클래스에 Entity

Therfore을 참조하기 때문에

@classmethod 
def get_collection(cls, conditional_str): 

cls

self 다른, 당신은 하지 전화 대신

self.get_subset_from_persistant(self.__class__.__name__, conditional_str) 

, 당신은 전화를 할 것입니다

cls.get_subset_from_persistant(cls.__name__, conditional_str) 
+0

무엇이 오류입니까? 그리고 왜 그것을 클래스 메소드로 만들고 싶습니까? – EyuelDK

+0

변경 전과 똑같은 오류가 발생합니다. "get_subset_from_persistant()에 1 개의 필수 위치 인수가 누락되었습니다 : 'conditional_str'". 파이썬에서 클래스 메소드를 사용하는 법을 배우기 때문에 그렇게하고 싶습니다. –