Sınıfları, hatta yerleşik olanları bile genişletmenin (özellikle, yeni yöntemler eklemenin, mevcut olanları değiştirmemenin) başka bir yolu, Python'un kendi kapsamının dışına / dışına genişletme yeteneği ekleyen bir ön işlemci kullanmaktır. Python gerçekten onu görmeden önce normal Python sözdizimi.
str()
Örneğin bunu Python 2'nin sınıfını genişletmek için yaptım . ve str()
gibi alıntılanan verilere örtük bağlantı nedeniyle özellikle ilginç bir hedeftir .'this'
'that'
Python dışı eklenen tek sözdiziminin extend:testDottedQuad
bit olduğu bazı genişletme kodları aşağıda verilmiştir :
extend:testDottedQuad
def testDottedQuad(strObject):
if not isinstance(strObject, basestring): return False
listStrings = strObject.split('.')
if len(listStrings) != 4: return False
for strNum in listStrings:
try: val = int(strNum)
except: return False
if val < 0: return False
if val > 255: return False
return True
Bundan sonra önişlemciye beslenen kodda yazabilirim:
if '192.168.1.100'.testDottedQuad():
doSomething()
dq = '216.126.621.5'
if not dq.testDottedQuad():
throwWarning();
dqt = ''.join(['127','.','0','.','0','.','1']).testDottedQuad()
if dqt:
print 'well, that was fun'
Önişlemci bunu yiyor, normal Python'u monkeypatching yapmadan tükürüyor ve Python benim yapmak istediğim şeyi yapıyor.
Tıpkı ac ön işlemcisinin c'ye işlevsellik katması gibi, bir Python ön işlemcisi de Python'a işlevsellik ekleyebilir.
Önişlemci uygulamam bir yığın taşması yanıtı için çok büyük, ancak ilgilenebilecekler için burada GitHub'da.