我正在研究爲某個字符串重載+
運算符,所以我在考慮子類化字符串類,然後在新類中添加代碼。然而,我想先看看標準的字符串類,但我似乎無法找到它......愚蠢的呃?python字符串類在源代碼中的位置
任何人都可以指路嗎?即使在線文檔的源代碼。
我正在研究爲某個字符串重載+
運算符,所以我在考慮子類化字符串類,然後在新類中添加代碼。然而,我想先看看標準的字符串類,但我似乎無法找到它......愚蠢的呃?python字符串類在源代碼中的位置
任何人都可以指路嗎?即使在線文檔的源代碼。
它記錄在here。主要實現在Objects/stringobject.c
。儘管子類str
可能不是你想要的。我傾向於喜歡作文。有一個字符串字段的對象和特殊行爲。
現在鏈接已死。請參閱https://svn.python.org/projects/python/trunk/Objects/stringobject.c – 2017-09-04 22:13:11
並且...鏈接再次死亡。我猜測源代碼現在位於['Objects/unicodeobject.c'](https://github.com/python/cpython/blob/master/Objects/unicodeobject.c)中的Github上。 – Delgan 2017-11-14 21:01:07
你可能是這個意思。
class MyCharacter(object):
def __init__(self, aString):
self.value= ord(aString[0])
def __add__(self, other):
return MyCharacter(chr(self.value + other))
def __str__(self):
return chr(self.value)
它的工作原理是這樣的。
>>> c= MyCharacter("ABC")
>>> str(c+2)
'C'
>>> str(c+3)
'D'
>>> c= c+1
>>> str(c)
'B'
我的實現是相似的,雖然不是整齊:
class MyClass:
def __init__(self, name):
self.name = name
def __add__(self, other):
for x in range(1, len(self.name)):
a = list(self.name)[-1 * x]
return self.name[:len(self.name)-x] + chr(ord(a) + other)
>>> CAA = MyClass('CAA')
>>> CAA + 1
'CAB'
>>> CAA + 2
'CAC'
>>> CAA + 15
'CAP'
「不夠整潔」?它有奇怪的,奇怪的問題。爲什麼在'for'循環的中間有'return'?這將執行一次「循環」並停止。沒有實際的「循環」進行。這可以大大簡化。 – 2010-09-29 21:50:46
另外,除非你使用Python 3,請將它作爲'object'的一個子類。 – 2010-09-29 21:51:24
它可以是C Extention,並內建類型,所以我認爲它無法打開代碼爲.py文件你在想什麼。 – shahjapan 2010-09-29 10:06:18
「我正在研究爲某個字符串重載'+'運算符」。在任何情況下,「超載」「某個字符串」都不是明智的。你可能需要一個新的類對象完全適用於字符串。你應該提供更多的信息,因爲你描述的內容沒有多大意義。 – 2010-09-29 11:45:43
以及具體的情況是重載字符串,以便當我添加使用__add__方法與數字類型(int,浮動等),它將'增加'到相應的字母。例如'A'+ 2 ='C'。然而,因爲我以前從未做過任何類型的重載,我也對運營商在一般意義上超載的方式感興趣,而不僅僅是在這種特殊情況下。 – momo 2010-09-29 14:43:55