Một cách khác để mở rộng (ý nghĩa cụ thể là thêm các phương thức mới, không thay đổi các phương thức hiện có), thậm chí là các lớp được tích hợp sẵn, là sử dụng một bộ tiền xử lý bổ sung khả năng mở rộng ra ngoài / trên phạm vi của chính Python, chuyển đổi phần mở rộng thành cú pháp Python bình thường trước khi Python thực sự nhìn thấy nó.
str()
Ví dụ, tôi đã làm điều này để mở rộng lớp của Python 2 . str()
là một mục tiêu đặc biệt thú vị vì mối liên kết ngầm với dữ liệu được trích dẫn chẳng hạn như 'this'
và 'that'
.
Đây là một số mã mở rộng, trong đó cú pháp không phải Python được bổ sung duy nhất là extend:testDottedQuad
bit:
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
Sau đó, tôi có thể viết mã được cung cấp cho bộ tiền xử lý:
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'
Bộ xử lý tiền xử lý ăn nó, tạo ra Python bình thường mà không cần khớp nối với khỉ và Python thực hiện những gì tôi dự định làm.
Cũng giống như bộ tiền xử lý ac thêm chức năng cho c, thì bộ tiền xử lý Python cũng có thể thêm chức năng vào Python.
Việc triển khai bộ tiền xử lý của tôi quá lớn đối với câu trả lời tràn ngăn xếp, nhưng đối với những người có thể quan tâm, nó có ở đây trên GitHub.