그래서 클래스에서 표준 연산자를 사용하여 내가 무엇을 만들 수 있는지 알아보고 있지만 부울 and
연산자를 편집하는 방법을 찾지 못했습니다.부울 및 연산자 편집
&
연산자를 __and__(self)
으로 정의 할 수 있지만 and
동작은 편집 할 수 없습니다. 누구든지 a and b
의 동작을 어떻게 바꿀 수 있는지 알고 있습니까? a
과 b
은 내가 만들고있는 클래스의 인스턴스입니까?
미리 감사드립니다.
그래서 클래스에서 표준 연산자를 사용하여 내가 무엇을 만들 수 있는지 알아보고 있지만 부울 and
연산자를 편집하는 방법을 찾지 못했습니다.부울 및 연산자 편집
&
연산자를 __and__(self)
으로 정의 할 수 있지만 and
동작은 편집 할 수 없습니다. 누구든지 a and b
의 동작을 어떻게 바꿀 수 있는지 알고 있습니까? a
과 b
은 내가 만들고있는 클래스의 인스턴스입니까?
미리 감사드립니다.
and
에서
및 or
액세스 __nonzero__
는 :
>>> class Test(object):
... def __nonzero__(self):
... print '__nonzero__ called'
... return True
...
>>> Test() and 1
__nonzero__ called
1
는 파이썬 3에서, __nonzero__
은 __bool__
로 이름이 바뀌 었습니다. 단락 회로 평가 __nonzero__
또는 __bool__
에 전화를 억제 할 수 있다는
>>> class Test:
... def __bool__(self):
... print('__bool__ called')
... return True
...
>>> Test() and 1
__bool__ called
1
참고.
>>> 0 and Test()
0
>>> 1 or Test()
1
또 다른 전문주의해야 할 파이썬/__bool__
__nonzero__
가 정의되어 있지 __len__
경우 액세스를 시도한다는 것입니다 및 __len__
이 0
이외의 값을 반환하는 경우 truthy로 오브젝트를 처리합니다. 두 가지 방법이 모두 정의되면 __nonzero__
/__bool__
이 이깁니다.
>>> class Test:
... def __len__(self):
... return 23
...
>>> Test() and True
True
>>>
>>> class Test:
... def __len__(self):
... return 23
... def __bool__(self):
... return False
...
>>> Test() and True
<__main__.Test object at 0x7fc18b5e26d8> # evaluation stops at Test() because the object is falsy
>>> bool(Test())
False
내가 부울, 말, 같은 bools의 목록이 아닌이 반환 뭔가를 할 수있는 방법이 있습니까?
불행히도, 아니오. documentation은 이라는 메서드는이어야합니다. False
또는 True
을 반환해야하지만 실제로 반환해야 할 경우 TypeError
이됩니다.
>>> class Test:
... def __bool__(self):
... return 1
...
>>> Test() and 42
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __bool__ should return bool, returned int
>>>
>>> bool(Test())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __bool__ should return bool, returned int
and
연산자 (초, 다른 제 돌아 반품 first.__bool__()
가 True
경우) __bool__
부울을 사용하는 제 피연산자들을 변환 후 논리 값에 소정의 동작을한다. 이 동작을 변경할 수있는 방법은 없습니다.
사실'b .__ bool __()'은 결코 호출되지 않을 것입니다. 제 대답에 약간의 부정확 함이있었습니다. –
@pycoder 당신이 실제로 말하길 "처음'.__ bool __()'이'True'이면 두 번째를 반환합니다. * 그러나이 경우에 반환되는 것은 두 번째의 부울입니다. 두 번째 자신이 아닙니다. –
@ev'1 "asdf"== "asdf"' –
피연산자 유형에 의존하지 않기 때문에 불가능합니다. –