홈>
코드는 다음과 같습니다
class MyTest:
def __init__(self):
pass
def __getattr__(self, attr):
pass
t = MyTest()
print 'my test object: %r' %t
인쇄는
TypeError: 'NoneType' object is not callable
를 트리거합니다
난 단지 개체가 존재하는지 확인하려는있다.
이 코드는별로 유용하지 않습니다. 그러나 나는 큰 코드 기반에서 이와 같은 스텁 클래스를 가졌으므로
if module and module.class and module.class.propery:
# do something with that property
...
와
Type Error: 'NoneType' object is not callable
를 얻었다
그러나 회선은 아무것도 호출하지 않습니다! 파이썬이 배후에서 암시 적으로 일부 함수를 호출한다고 생각합니다.
Object
에서 상속하면 이런 일이 발생하지 않습니다.
무슨 일이야?
- 답변 # 1
- 답변 # 2
파이썬 2에서 구식 클래스를 사용하면
__getattr__
를 호출하려고 할 때 객체에 (인쇄시), 당신은__repr__
이 전화했다.이 메소드를 심하게 스텁했기 때문에
__getattr__
를 리턴합니다. 파이썬은None
를 호출하려고합니다. (이 방법을 기대하고 있기 때문에 반환 예정)None
에게 전화를 걸다 대신 작동합니다 :object.__getattr__
인쇄 :
class MyTest: def __init__(self): pass def __getattr__(self, attr): print(attr) # so we see why getattr is called return object.__getattr__(self,attr) # so it doesn't crash (neither it is useful...) t = MyTest() print ('my test object: %r' %t)
이 특정 파이썬 2/이전 스타일 개체의 문제입니다. 파이썬 3 또는 새로운 스타일의 객체는 동일하게 동작하지 않습니다
__repr__ my test object: <__main__.MyTest instance at 0x00000000031B3808>
관련 자료
- reactjs - expo 애플리케이션에서 typeerror 발생 - undefined는 객체가 아닙니다 ( '_this2statenotificationdata'평가)
- python - make_class typeerror 만들기 : 개체가 항목 할당을 지원하지 않습니다
- python - typeerror - 'webelement'유형의 개체에 len ()이 없습니다
- python - typeerror - 'int'객체는 python38에서 첨자 할 수 없습니다
- reactjs : TypeError : 대응 컨텍스트로 작업 할 때 객체가 반복적이지 않습니다.
- python - typeerror - 'str'객체는 정수로 해석 될 수 없습니다 (int가 아닌 문자열로 input ()을 사용하고 있습니다)
- python - "typeerror - 'nonetype'개체가 항목 할당을 지원하지 않습니다"이 문제를 해결하려면 어떻게해야합니까?
- javascript : TypeError : 개체가 반복 할 수 없습니다 (Symbol (Symbol.iterator) 속성을 읽을 수 없음)
- python - q - typeerror : '_csvreader'개체를 호출 할 수 없습니다
- python 3.x - typeerror - '사용자'유형의 개체는 json 직렬화 가능하지 않습니다 왜 이런 일이 발생합니까?
- python - typeerror - 객체 nonetype은 'await'표현식 (봇)에서 사용할 수 없습니다
- python - 코드 오류 - averageofmarks = sum (sumofmarks)/5 typeerror : 'int'개체는 반복 할 수 없습니다
- python - 열 유형을 객체에서 부동으로 변경했지만 TypeError가 발생했습니다
- Python - 파이썬 - os 모듈 'typeerror :'bool 'object is not iterable' '
- python - typeerror - '유형 개체는 스크립팅 할 수 없습니다'
- python - typeerror - 'method'객체는 정수로 해석 될 수 없습니다
- python - typeerror - <watson_developer_cloudwatson_servicedetailedresponse 객체 (0x7f64ee350240)가 json 직렬화 가능하지 않습니다
- python - 'typeerror - 'str '개체가 항목 할당을 지원하지 않습니다'수정하는 방법
- python 3.6 - typeerror - 'module'객체를 호출 할 수 없습니다 :pygsp 모듈을 호출 할 수 없음
- python - typeerror - 역 범위에 액세스하는 동안 'list'개체를 호출 할 수 없습니다
관련 질문
- python : @classmethod의 위치
- python : 텍스트 기반 게임의 오류
- python : 다른 CRS를 사용하여 .tif에서 .tif로 내보내기
- Python에서 SimpleITK 이미지의 방향을 변경하는 방법
- python : n 시간이 지난 후 while 루프를 어떻게 중지합니까?
- python : for 루프를 사용하여 각 항목 없이 모든 목록을 인쇄하려면 어떻게 해야 합니까? 파이썬에 대안이 있습니까?
- python : TypeError: _prepare_related_fields_for_save() 누락된 1개의 필수 위치 인수: 'self'
- python : 아나콘다를 사용하여 jupyter 노트북에 영어 공간 모델을 설치하는 방법
- python : 목록 및 사전의 이 기능을 이해할 수 없습니다.
이전 스타일 클래스
__getattr__
에서 매직 메소드를 포함하여보다 다양한 속성 액세스에 사용됩니다. 와이즈 비즈 운영자는%
전화하려고t.__repr__()
를 채우기 위해 자리 만%r
t.__repr__
에 의해 평가됩니다t.__getattr__('__repr__')
를 리턴합니다. .None
에서 다른 매직 메소드가 호출되지만 동일한 문제가 발생합니다.>>> class Foo: ... def __getattr__(self, attr): ... print(attr) ... >>> f = Foo(): >>> if f: ... pass __nonzero__ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' object is not callable
, 새로운 스타일의 클래스를 사용하여 일반 메소드를 통해 속성을 찾을 수없는 경우에만 호출됩니다 (__getattr__
확인). 인스턴스 또는 인스턴스의 MRO에있는 클래스의 속성).>>> class Foo(object): ... def __init__(self): ... self.x = 3 ... def __getattr__(self, attr): ... print(attr) ... >>> f = Foo() >>> if f: ... pass ... >>> f.x 3 >>> f.y y
에서 케이스,if f
자체f
구현하지 않습니다 또는__nonzero__
부모__len__
도 마찬가지입니다. 하지만,이 경우, 어떤 특성은 사용되지 않는다;그object
사실 사실, 객체가 사용된다.f
에서f.x
그 값이 직접 반환되도록, 인스턴스의 속성 딕셔너리에서 발견된다. 오직x
y
에 의해 달리 정의되지 않은f
또는Foo
object
에 대한 호출을 호출합니다. .