5

在我最新的一系列问题中,我询问了关于在argparse. 大多数情况下,我想更改定义为的属性:

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"))

这会失败并出现属性错误,因为 re 没有命名属性RegexObject,即使它在文档中也是如此。为什么 RegexObject 记录在案但不可用?我应该在那里使用什么?我想我可以说:type(a) is type(b),但这看起来很难看......

4

1 回答 1

6

是的,<type '_sre.SRE_Pattern'>但我会简单地使用type(re.compile('')).

顺便说一句,似乎即使是re开发人员也不确定确切的类型是什么,如下所示

_pattern_type = type(sre_compile.compile("", 0))
于 2012-06-14T14:30:07.370 回答