>  Q&A  >  본문

python3,定制类,getattr相关用法

class Chain(object):
    def __init__(self,path=""):
        self._path = path
    def __getattr__(self,path):
        return Chain("%s/%s" %(self._path,path))
    def __call__(self,path):
        return Chain("%s/%s" %(self._path,path))
    def __str__(self):
        return self._path
    __repr__ = __str__
    
print(Chain().a.b.user("Michael").c.d)

看了好久还是理解不了这语句,如能详述一些细节,感激不尽

PHP中文网PHP中文网2717일 전497

모든 응답(1)나는 대답할 것이다

  • PHPz

    PHPz2017-04-18 10:27:47

    getattr(객체, 이름[, 기본값])

    으아악

    _getattr__은 속성을 동적으로 반환하는 Python의 내장 함수입니다.
    존재하지 않는 속성을 호출하면 Python은 __getattr__(self,'score')를 호출하여 속성을 가져오고 점수를 반환합니다.

    __str__은 함수를 인쇄하는 데 사용됩니다.
    __call__은 클래스를 유사한 함수로 호출합니다.

    코드 실행 흐름:
    Chain()은 인스턴스를 생성하고 경로는 초기에 ""로 기본 설정됩니다. Chain().a의 경우 클래스에 속성이 없으며 Python 파서가 getattr 함수를 호출합니다. --> __getattr__ (self,path='a'),
    체인 인스턴스를 반환한 다음 /a 할당 gei 경로를 전달하고 b를 계속 진행합니다. b 속성이 없기 때문에 getattr 함수를 실행하고 전달합니다. /a/b in,
    그런 다음 .user("Michael")는 먼저 getattr을 실행하여 Chain 인스턴스를 반환하지만 () 대괄호가 있으므로 Chain()이 반환됩니다.
    이렇게 하면 호출 함수가 호출됩니다. , " ChenTian"이 경로로 전달되고 호출 함수는 /a/b/user/ChenTian을 반환하며 나머지는 유사합니다.

    으아악

    코드 흐름도

    회신하다
    0
  • 취소회신하다