gpt4 book ai didi

python - 从类变量元素构造实例变量 pyparsing 匹配器

转载 作者:行者123 更新时间:2023-12-01 03:28:46 25 4
gpt4 key购买 nike

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,.... 是 class 变量,以便我可以引用他们在 expr 中就像这样,不必在它们前面加上前缀实例引用self(如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']

我担心的是:即使对于有很多的非常复杂的匹配器,这也适用吗?(嵌套)abcd等...?或者换句话说:是完整逻辑从类变量(深度)复制到实例对象 expr,因此 abc 并不重要在下一个 MyMatcher 对象创建时被覆盖?

或者,如果这是一个问题,是否有另一种方法来创建不同的具有简短而优美的结构的匹配器,例如 (a + b | b ) +
pp.Optional(c)
?

最佳答案

变量abc、....不是类变量;它们是 __init__ 方法中的局部变量。只要需要,对这些变量的引用就会保持事件状态。 (请参阅 Python 文档 Scopes and Namespaces in Classes。)

关于python - 从类变量元素构造实例变量 pyparsing 匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41175858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com