programing tip

파이썬에서 클래스의 "불량"정의

itbloger 2020. 11. 20. 08:42
반응형

파이썬에서 클래스의 "불량"정의


순진하게 예상했던대로 이것이 작동하지 않는 이유는 무엇입니까?

class Foo(object):
    def __init__(self):
        self.bar = 3
    def __bool__(self):
        return self.bar > 10

foo = Foo()

if foo:
    print 'x'
else:
    print 'y'

(출력은 x)


Python 2-3 호환성을 위해 다음을 예제에 추가하십시오.

Foo.__nonzero__ = Foo.__bool__

또는 다음을 포함하도록 Foo의 원래 정의를 확장합니다.

__nonzero__ = __bool__

물론 메서드 이름이있는 역으로 정의 할 수도 있습니다. 여기에 메서드 이름 __nonzero__을 할당하고.에 할당 할 수도 __bool__있지만, 이름 __nonzero__은 객체와 동등성을 기반으로 한 객체를 진실 또는 거짓으로 해석하는 Python의 원래 C-ishness의 유산 일 뿐이라고 생각합니다. 제로. 위의 명령문을 추가하면 코드가 Python 2.x에서 작동하며 Python 3.x로 업그레이드 할 때 자동으로 작동합니다 (결과적으로 할당을 __nonzero__.


__bool__메서드는 Python 3에서 사용됩니다 __nonzero__. Python 2의 경우 .


해당하는 특수 메서드가 Python 3이 __nonzero__()아닌 Python 2에서 호출 __bool__()되기 때문입니다.

참고 URL : https://stackoverflow.com/questions/8205558/defining-boolness-of-a-class-in-python

반응형