4
在我最近的一系列問題中,我詢問了有關的內部結構。大多數情況下,我想改變定義爲一個屬性:re.RegexObject不存在(引發AttributeError)
class FooClass(object):
def __init__(self):
self._this_is_a_re=re.compile("foo")
既然是「保護」,我想,以檢查是否存在該屬性,如果它是一個正則表達式之前,我在我自己的正則表達式替換。例如: -
import re
myFoo=FooClass()
attr='_this_is_a_re'
if(hasattr(myFoo,attr) and isinstance(getattr(myFoo,attr),re.RegexObject):
setattr(myFoo,attr,re.compile("bar"))
這失敗的一個屬性錯誤,因爲再沒有名爲RegexObject
,即使它是在documentation屬性。爲什麼RegexObject記錄但不可用?我應該在那裏使用什麼?我想我可以說:type(a) is type(b)
,但這似乎很難...
是的,我可以看到...但爲什麼類型的東西前綴當're.RegexObject'是我們總是在文檔中引用的時候用下劃線表示的?和'isinstance(a,_sre.SRE_Pattern)'也不起作用。 'isinstance(a,re._pattern_type)'確實有效。 – mgilson
看起來我們正在收集同一個想法 - 我通過反覆試驗得出了結論,並查看了「dir」的輸出結果 - 檢查源代碼可能是一種更好的方法。 – mgilson