문제

하나의 추가 속성이있는 문자열을 원합니다. 빨간색 또는 녹색으로 인쇄할지 여부를 가정 해 봅시다.

서브 클래스 (str)는 불변이기 때문에 작동하지 않습니다. 나는 그 가치를 볼 수 있지만 성가시킬 수 있습니다.

다수의 유전이 도움이 될 수 있습니까? 나는 그것을 사용하지 않았다.

객체 만 상속하고 self.value = str을 사용한다는 것은 모든 문자열 메시지 (예 : 스트립) 직접 구현해야한다는 것을 의미합니다.

아니면 루비의 누락 된 _method처럼 그들을 전달할 수있는 방법이 있습니까?

예를 들어 색인으로 인덱싱 된 클래스 수준 사전을 사용하여 색상을 저장할 수 있다고 생각합니다. 너무 못 생겼어?

도움이 되었습니까?

해결책

예를 들어 매우 오래된 Python 버전을 사용하지 않는 한 STR은 상속 될 수 있습니다.

>>> class A(str):
...    def __new__(cls, color, *args, **kwargs):
...        newobj = str.__new__(cls, *args, **kwargs)
...        newobj.color = color
...        return newobj
>>> a = A("#fff", "horse")
>>> a.color
'#fff'
>>> a
'horse'
>>> a.startswith("h")
True

다른 팁

아마도 맞춤형 클래스 일 것입니다 포함 문자열은 더 나은 접근 방식이 될 것입니다. 모든 문자열 메소드를 기본 문자열로 전달해야합니까? 건물을 통해 문자열을 노출시키고 클래스 소비자가 원하는대로 할 수 있도록 허용하지 않겠습니까?

import UserString
class mystr(UserString.MutableString):
   ...

일반적으로 불변의 현 및 서브 클래스를 사용하는 것이 가장 좋습니다. 그러나 돌연변이가 필요한 경우 가장 간단한 방법입니다.

문자열의 모든 메소드가 필요하므로 문자열을 확장하고 추가 세부 정보를 추가하십시오. 그렇다면 문자열이 불변이라면 어떨까요? 수업도 불변으로 만드십시오. 그런 다음 어쨌든 새로운 객체를 만들어서 실수로 변이 가능한 객체라고 생각하지 않을 것입니다.

또는 Python에 하나가 있으면 변이 가능한 String 변형을 확장하십시오. 나는 그러한 구조가 존재하는지 알기 위해 파이썬에 익숙하지 않습니다.

당신은 그것을 사용해 볼 수 있습니다 stringlike 모듈 pypi. 여기에 있습니다 .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top