에서 init__ .__ 통화 유니 코드가 나는 상황이 발생 한 경우 파이썬에 대한 사용 중단 경고 이전에 파이썬 3.3에서 3.3로 오류의 하위 클래스 유니 코드 결과 :방법 (또는 왜 안) 서브 클래스
# prove that unicode.__init__ accepts parameters
s = unicode('foo')
s.__init__('foo')
unicode.__init__(s, 'foo')
class unicode2(unicode):
def __init__(self, other):
super(unicode2, self).__init__(other)
s = unicode2('foo')
class unicode3(unicode):
def __init__(self, other):
unicode.__init__(self, other)
s = unicode3('foo')
호기심의 경고/에러는 처음 세 줄에서는 발생하지 않고, 대신에 8 번과 14 번 줄에서 발생합니다. 파이썬 2.7의 결과는 다음과 같습니다.
> python -Wd .\init.py
.\init.py:8: DeprecationWarning: object.__init__() takes no parameters
super(unicode2, self).__init__(other)
.\init.py:14: DeprecationWarning: object.__init__() takes no parameters
unicode.__init__(self, other)
코드는 간략하게 설명되어 있습니다. 실제 응용 프로그램에서는 단순히 수퍼 전화 __init__
을 호출하는 것 이상의 작업을 수행 할 것입니다.
그것은 유니 __init__
클래스를 구현하는 첫 번째 세 라인으로부터 나타나고 그 방법은 적어도 하나의 매개 변수를 수용한다. 그러나 서브 클래스에서 해당 메서드를 호출하려면 super()
을 호출하는지 여부에 관계없이이를 수행 할 수없는 것으로 보입니다.
왜 유니 코드 인스턴스가 아니라 유니 코드의 서브 클래스에 unicode.__init__
를 호출 괜찮습니다? 유니 코드 클래스를 서브 클래 싱하는 경우 작성자는 무엇을해야합니까?
문자열을 하위 클래스로 분류한다고 생각하지 않습니다 ... 내부적으로 유니 코드 문자열을 사용하여 사용자 지정 클래스를 만들 수없는 특별한 이유가 있습니까? 객체를 유니 코드 문자열처럼 쉽게 걷고 말하게 할 수 있습니다. – Hubro
왜 문제가 발생하는지 모르겠지만 유니 코드를 서브 클래 싱하는 것은 정말 이례적인 것처럼 보입니다. –
완벽한 세계에서 어떤 객체라도 서브 클래스 할 수 있어야합니다. 문자열을 서브 클래 싱하는 것은 특히 서브 클래스가 _as_ 문자열을 사용해야 할 때 유용합니다. 문자열의 모든 인터페이스를 에뮬레이션하려고하면 간단히 서브 클래 싱하는 것보다 훨씬 어렵고 오류가 발생하기 쉽습니다. 예를 들어, 하위 클래스 화없이'isinstance (my_subclass_instance, basestring) '에 대해 true를 반환하도록 클래스를 구현하는 방법은 무엇입니까? https://bitbucket.org/yougov/pmxbot/src/6415472739/pmxbot/core.py#cl-48 및 https://github.com/jaraco/path.py/blob/ba38fc205e/path.py#L106을 참조하십시오. 유용한 예제. –