2011-03-03 2 views
2

저는 python을 처음 사용합니다. 나는 비 클래스 객체가 기반 인 속성을 가지고 있지 않지만 클래스 객체는 그것을 가지고 있다고 생각한다. 그러나 나는 확실하지 않다. 파이썬 \ cpython은 객체가 클래스가 아닌 클래스인지 또는 클래스인지를 확인하고 속성 액세스 중에 객체의 기술자 속성에 올바른 인수를 전달합니까?클래스 개체에서 파이썬 비 클래스 개체를 알려주는 방법

===========================================

업데이트 :

__getattribute__과 설명자가 함께 협력하여 제한된 방법을 만드는 법을 배우고있었습니다. 클래스 객체 & 클래스 객체가 설명자의 __get__을 어떻게 다르게 호출하는지 궁금합니다. 나는이 두 가지 유형의 객체가 동일한 __getattribute__ CPython 함수를 공유하며 호출하는 객체가 클래스인지 비 클래스인지를 동일한 함수가 알고 있어야한다고 생각했습니다. 그러나 나는 틀렸다. 이 문서에서는 잘 설명 : 비 클래스 객체를 사용 object.__getattribute__ 반면

http://docs.python.org/dev/howto/descriptor.html#functions-and-methods

그래서 클래스 객체를 사용 type.__getattribute__. 그들은 다른 CPython 함수입니다. 수퍼에는 세 번째 __getattribute__ CPython 구현도 있습니다.

그러나,이 슈퍼 하나, 위의 문서가 있다는 주장에 대해 : 견적과 견적


슈퍼에 의해 반환되는 객체()는 사용자 정의 _ 의 getAttribute _이 (가) 메소드 기술자를 호출하기위한 super B (obj) .m() 호출은 obj._ 클래스 _._ mro _을 B의 바로 뒤에 오는 기본 클래스에 대해 검색 한 다음 A._ dict _ [ 'm']을 반환합니다. _ _ (obj, A)입니다. 설명자가 아닌 경우 m은 변경되지 않고 반환됩니다. 사전에 없으면 m은 object._ getattribute _()을 사용하여 검색으로 되돌아갑니다.


위의 설명은 내 실험과 Python3.1의 일치하지 않습니다. 나에게 합리적인 내가이보고 :

super(B, objclass).m ---> A.__dict__['m'].__get__(None, objclass)

__get__

에 전달되지 않았다

super(B, obj).m ---> A.__dict__['m'].__get__(obj, type(obj))

objclass = 유형 (OBJ) 그것은 합리적이다 내가 믿기 때문에 내게로 objclass (보다는 대답)의 mro 체인은 m 두 번째 경우에 특히 필요합니다.

내가 잘못 했습니까? 아니면 제대로 이해하지 못했습니까?

+0

나는 당신이 무엇을 요구하고 있는지 명확하지 않습니다. 아마도 그 예가 순서일까요? –

+0

왜이 점에 대해 신경 써야합니까? –

+0

Seconded. 이것에 대해 신경 쓰는 것은 파이썬이 개발 된 것들 중 하나에 반대한다. – rossipedia

답변

1

질문 : 왜 상관이야? 일반적으로 사용되는 방식과 달리 Python을 사용하지 않는다는 신호입니다.

매우 강력한 파이썬 개념은 ducktyping입니다. 필요한 속성을 노출하는 한 객체의 유형이나 클래스는 중요하지 않습니다.

관련 문제