一般來說,我非常重視模塊隱私(如果一個變量帶有下劃線前綴,我不會使用它)。然而,我有一個角落案例,它似乎是合理的「安全」。尊重argparse的隱私與可用性
這裏的演示(my previous question)
parser=argparse.ArgumentParser()
parser.add_argument('--point',help='enter a point (e.g. 2,3,4)')
parser.parse_args('--point=-2,5,6'.split()) #works
parser.parse_args('--point -2,5,6'.split()) #doesn't work
這可以通過固定的:在這種情況下
parser=argparse.ArgumentParser()
parser.add_argument('--point',help='enter a point (e.g. 2,3,4)')
parser.parse_args('--point=-2,5,6'.split()) #works
parser._negative_number_matcher = re.compile(r'^-\d+|^-\d*\.\d+')
#Next line works too on Cpython 2.6,
#got the idea from reading Cpython 3.2 source so it should work there too
parser.parse_args('--point -2,5,6'.split())
的一個類的內部玩這個量看起來不錯,因爲:
*如果argparse更改該變量(不太可能)或不同的python實現做不同的事情,看起來這不太可能會改變導致某些事情中斷的類。
*其他python實現可能使用cpython的argparse,因爲它是用純python編寫的(據我所知)。
*我的代碼並不依賴於這個「功能」的工作。 (用戶可以始終恢復傳遞' - point = -2,5,6')
我的問題是這樣的:我是否錯過了什麼?這真的是一個壞主意嗎?我可能會打破什麼?如果是這樣,爲什麼?
恕我直言,這就是猴子補丁的全部內容,也是Python無法解決的原因。 – sberry