2011-09-19 3 views
1

이 질문은 비슷하지만 정적 메서드와 관련이 있습니다. In Python, how do I reference a class generically in a static way, like PHP's "self" keyword?Python : 일반적으로 인스턴스 메서드에서 클래스에 대한 참조?

인스턴스 메서드에서 클래스를 일반적으로 어떻게 참조합니까?

#!/usr/bin/python 
class a: 
    b = 'c' 
    def __init__(self): 
     print(a.b) # <--- not generic because you explicitly refer to 'a' 

    @classmethod 
    def instance_method(cls): 
     print(cls.b) # <--- generic, but not an instance method 

답변

1

(코드를 파이썬 2.x에서 코드 및 object에서 상속되지에서 클래스 인 경우)에 __class__ property를 사용합니다. (코드를 파이썬 3 코드 인 경우)

def __init__(self): 
    print(self.__class__.b) # Python 2.x and old-style class 

를 들어 새로운 스타일의 클래스, type를 사용

def __init__(self): 
    print(self.__class__.b) # __class__ works for a new-style class, too 
    print(type(self).b) 

내부적으로 type__class__ 속성을 사용합니다.

+0

나는 이것이 파이썬 3 코드라고 생각했다. (올바른 생각으로 누가 옛 스타일의 클래스를 사용할 것인가?). 파이썬 2에 대한 설명으로 업데이트되었습니다. 구식 ** 및 ** 새 스타일 클래스를 모두 지원하려면'__class__'을 사용하십시오. – phihag

+0

+1 2.7에서 개체를 상속하지 않을 때 이것이 올바른지 확인합니다. 왜 누군가는 \ _ \ _ class \ _ \ _보다 type()을 선호합니까? – pokstad

+3

@pokstad : 밑줄이 많이 없습니다 : D 또한, 객체는 어리석은 일을하고'__class__'를 오버라이드 할 수 있지만'type'을 속일 수는 없습니다. – delnan

3

새로운 스타일의 클래스는 self.__class__ 속성을 사용할 수 있습니다.

3.x 호환 Python에서 모든 클래스는 새로운 스타일입니다.

3.x 이전에는 class a(object):을 사용하여 새 스타일로 선언합니다. 이전 스타일 클래스를 들어

+0

개체를 상속하지 않고 pre 3.x는 어떻게됩니까? – pokstad

+0

@pokstad 구식 클래스는 동일한 속성을 사용할 수 있습니다. 자세한 내용은 내 대답을 참조하십시오 (나는 왜 그것이 현재 -1로 투표했는지 모르겠습니다). – phihag

관련 문제