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

これは属性エラーで失敗します。これは、ドキュメントRegexObjectに記載されているにもかかわらずre に名前が付けられた属性がないためです。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 に答える