[英]Constructing a instance variable pyparsing matcher from class variable elements
通過pyparsing
我構造了一個復雜的匹配器對象,該對象應該根據實例化標志匹配稍有不同的事物。 這是一個(簡化的)示例:
class MyMatcher():
def __init__( self, special_flag = False):
self.special_flag = special_flag
a = pp.Word(pp.alphas)('A')
if self.special_flag:
b = pp.Word(pp.alphas)('B')
else:
b = pp.Word(pp.nums)('B')
c = pp.Word(pp.alphas)('C')
# d = ...
# e = ...
# ...
self.expr = (a + b | b ) + pp.Optional(c) # + ...
def parse(self, s):
return self.expr.parseString(s, parseAll=True)
a
, b
, c
,...是類變量,因此我可以像這樣在expr
引用它們,而不必在實例引用self
self.a
加上前綴(例如self.a
)。 expr
必須是一個實例變量,因為MyMatcher
不同實例必須匹配不同的事物。
上面的示例有效:
mymTrue = MyMatcher(True)
mymFalse = MyMatcher(False)
print (mymTrue.parse("alpha aaaa alpha"))
print (mymFalse.parse("alpha 777 alpha"))
返回預期:
['alpha', 'aaaa', 'alpha']
['alpha', '777', 'alpha']
我擔心的是:即使對於具有很多(嵌套) a
, b
, c
, d
等的非常復雜的匹配器,這也行得通嗎? 或用不同的措詞: 是從類變量到實例對象expr
復制了完整的邏輯(深層) ,因此在下一個MyMatcher
對象創建時a
, b
和c
被覆蓋MyMatcher
嗎?
或者,如果這是一個問題,是否還有另一種方法可以用短而美觀的結構來創建各種匹配器,例如(a + b | b ) + pp.Optional(c)
?
變量a
, b
, c
,... 不是類變量。 它們是__init__
方法中的局部變量。 只要需要,對這些變量的引用將保持有效。 (請參見Python文檔中的范圍和類中的命名空間 。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.