2012-06-14 4 views
4

최근 일련의 질문에서 내부 용으로 argparse을 속이고 묻습니다. 이 "보호"하기 때문에, 나는이 속성이 존재하는지 확인하고 싶은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")) 

다시는이 documentation의 경우에도 RegexObject를라는 이름의 속성이 없기 때문에이 속성의 오류와 함께 실패합니다. RegexObject는 문서화되었지만 사용할 수없는 이유는 무엇입니까? 내가 거기에서 사용하기로되어있는 것은 무엇입니까? 내가 말할 수 있다고 가정 해 봅시다. : type(a) is type(b),하지만 못생긴 것 같습니다 ...

답변

5

그것은 이지만 단순히 type(re.compile(''))을 사용하고 싶습니다.

BTW, here와 같이도 re 개발자가 정확한 유형이 무엇인지 확실히 알고하지 않는 것이 나타납니다

_pattern_type = type(sre_compile.compile("", 0)) 
+1

예를 나는 것을 볼 수 있습니다 ... 그런데 왜 유형의 무언가가 앞에 붙 're.RegexObject'가 우리가 항상 문서에서 참조하는 것일 때 밑줄로 표시합니까? 및 isinstance (a, _sre.SRE_Pattern)도 작동하지 않습니다. 'isinstance (a, re._pattern_type)'가 작동합니다. – mgilson

+0

우리는 같은 생각으로 수렴하고있는 것처럼 보입니다. 나는 시행 착오를 거쳐'dir'의 결과물을 보았습니다. - 소스를 확인하는 것이 더 좋은 방법 일 것입니다. – mgilson

관련 문제