2013-06-05 27 views
-2

我正在構建一個字符串類,它的行爲類似於常規字符串類,不同之處在於加法運算符返回兩個字符串的長度之和而不是連接它們。然後乘法運算符返回兩個字符串長度的乘積。所以我打算做類:添加len的替代方法

class myStr(string): 
     def __add__(self): 
      return len(string) + len (input) 

至少這是我對第一部分,但這顯然是不正確的。有人可以幫我糾正它。

+1

請始終發佈您的代碼給您的完整錯誤。 – Marcin

+0

你爲什麼要這樣做?這是一個非常奇怪的設計。一個對象,它有一個字符串,並以各種方式使用它,甚至將一些方法委託給字符串......這並不算太糟糕。但是一個對象,它是__字符串,但以非字符串的方式執行一些操作,只會讓人困惑。 – abarnert

+1

另外請注意,一旦你得到這個權利,'myStr('abc')+'def''將是6,但''abc'+ myStr''def')將會是'abcdef'。更糟的是,'s = myStr('abc'); s + = myStr('def')'將's'設置爲6.這真的是你想要的嗎? – abarnert

回答

4

您需要從str派生出來,並且您可以使用len(self)來獲取當前實例的長度。您還需要爲__add__提供+運算符的其他操作數的參數。

class myStr(str): 
    def __add__(self, other): 
     return len(self) + len(other) 

演示:

>>> class myStr(str): 
...  def __add__(self, other): 
...   return len(self) + len(other) 
... 
>>> foo = myStr('foo') 
>>> foo 
'foo' 
>>> foo + 'bar' 
6 
+0

你不需要'str .__ len __(self)'或'super'; 'len(self)'工作得很好。 (他沒有重寫'__len__',所以'myStr .__ len__'和'str .__ len__'完全一樣。) – abarnert

+0

@abarnert:當然是。 –

1

string是不是一類。這不是什麼*。除非您定義string,否則len(string)將不起作用。其次,__add__沒有參數input

您需要解決這兩個問題。

*您可以導入一個名爲string的模塊,但它不是全局範圍內存在的模塊。

+0

'string'是[stdlib中的一個模塊](http://docs.python.org/3/library/string.html)。 – abarnert