2010-02-16 7 views

답변

3

파이썬의 문자열은 변경할 수 없으므로 한 문자열이 있으면 그 값을 변경할 수 없습니다. int에서 파생 된 클래스가있는 경우와 거의 같으며 int 값을 변경하는 방법을 추가했습니다.

당신은 물론 새 값을 반환 할 수 있습니다 파이썬에서 당신은 그냥 문자열에 곱셈 연산자를 사용할 수 있다는

class str_usr(str): 
    def dup(self): 
     return self + self # or 2 * self 

s = str_usr("hi") 
print s # prints hi 
print s.dup() # print hihi 
+0

고마워, 그건 내 질문에 대답했다. 그러나 귀하와 Mike Grahams의 대답을 통해 나는 내 생각이 좋은 일반적인 접근 방식이 아니라는 것을 알 수 있습니다. –

2

:-) 어떤 도움

class str_usr(str): 
     def __new__(cls, arg): 
      return str.__new__(cls, arg) 
     def dub(self): 
      # How to modify the string value in self ? 
      self.<attr> = self.<attr> + self.<attr> 

감사합니다. 새로운 클래스를 확인하고 사용자가 액세스 문자열이 될 그 속성 중 하나가, 그 이것에 대해주의 또한

class MyString(object): 
    def __init__(self, string): 
     self.string = string 

    def dup(self): 
     self.string *= 2 

입니다 : CamelCaseCapitalization 그래서 사람들이 클래스이다 인식 할 수와

  • 이름 당신의 클래스. str 및 일부 다른 내장 함수는이를 따르지 않지만 모든 사용자 정의 클래스는이를 수행합니다.
  • 일반적으로 __new__을 정의 할 필요는 없습니다. __init__을 정의하면 효과가 있습니다. 그들은 당신이 __new__을 정의한 방식으로 특별히 도움이되지 않습니다.
  • 문자열에 새로운 기능을 추가하려면 클래스를 원하지 않을 수 있습니다. 문자열을 취하는 함수를 정의하기를 원할 것입니다.
+0

감사 철저한 대답. –

0

참고 :

>>> s = "foo" 
>>> s*2 
'foofoo' 
+0

아아아, 알로 크는 이미 이것을 언급했음을 알았습니다 ... 음, 어쨌든이 경우 서브 클래 싱은 과장성/난독 화라는 점을 강조하기 위해 대답을 남겨 둘 것입니다. – paprika

+0

OP에 서브 클래 싱이 필요하지 않다고 언급했기 때문에 대답이 좋습니다. 우리는 그가 자신의 하위 클래스로 무엇을하고 싶어하는지 알지 못합니다. –

관련 문제