python3,定制类,getattr相关用法
PHP中文网
PHP中文网 2017-04-18 10:25:47
0
1
494
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中文网

认证高级PHP讲师

모든 응답(1)
PHPzhong

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을 반환하며 나머지는 유사합니다.

으아악

코드 흐름도

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!