Python 使用带“的类执行代码”;加上;声明,但不要';在运行某个函数之前,是否不执行代码?
如何使用带有“with”语句的类执行代码,但在运行某个函数之前不执行代码 例如,如果我有课程:Python 使用带“的类执行代码”;加上;声明,但不要';在运行某个函数之前,是否不执行代码?,python,python-3.x,Python,Python 3.x,如何使用带有“with”语句的类执行代码,但在运行某个函数之前不执行代码 例如,如果我有课程: Foo类: 定义初始化(自): self.bar=“baz” 定义输入(自我): 回归自我 定义退出(自、x、y、z): 一无所获 def运行(自): #开始运行插入到_输入_中的代码? 我使用的课程如下: bar=Foo() 将条形图作为f: 打印(f.bar) #在调用run()之前不要执行此代码 bar.run() #现在执行插入上述with语句的代码 这可能吗?我认为您无法做到这一点,
Foo类:
定义初始化(自):
self.bar=“baz”
定义输入(自我):
回归自我
定义退出(自、x、y、z):
一无所获
def运行(自):
#开始运行插入到_输入_中的代码?
我使用的课程如下:
bar=Foo()
将条形图作为f:
打印(f.bar)
#在调用run()之前不要执行此代码
bar.run()
#现在执行插入上述with语句的代码
这可能吗?我认为您无法做到这一点,因为您目前编写代码的方式是这样的。但是,实际上,您希望从
Foo.\uuuu输入\uuuu
调用bar.run()
class Foo:
def __init__(self, pre=None):
self.bar = "baz"
def __enter__(self):
self.run()
return `self`
def __exit__(self, x, y, z):
return None
def run(self):
# Start running code inserted into __enter__?
bar = Foo()
with bar as f:
print(f.bar)
不,with块内的代码仅在with块执行期间执行。例如,它不是作为闭包传递给上下文管理器的
如果需要这种行为,可以使用装饰器和局部函数声明,而不是with块
class Foo:
def __init__(self, callback):
self.callback = callback
self.bar = 'baz'
def run(self):
# Setup goes here.
try:
self.callback(self)
finally:
# Cleanup goes here.
pass
@Foo
def bar(f):
print(f.bar)
bar.run()
这是我能得到的最接近你的例子,包括名字。我认为直接将构造函数作为decorator应用可能有点笨拙-您可能更喜欢使用单独的decorator函数来调用和返回类实例,但您得到了一般的想法。您可以将代码放入函数中并将其传递给Foo
的构造函数,或者进入run
方法?如果不可能,是否有任何特殊原因导致您不能在调用bar.run()
后将with
块放入代码中?也许你可以给我们看一个真实的例子,因为我真的不明白为什么你要把with
块放在调用bar.run()
之前,如果你想让它在后面运行的话。我想OP的意思是把with bar作为f:
块中包含的代码推迟到调用bar.run
为止,在上下文管理器退出后的某个时间点。您只需在进入上下文管理器时调用run
方法,然后继续运行with
块中包含的代码,这不是OP想要的。我知道这是他想要的,但除了使用内省
动态重写代码之外,\u enter\u
无法做到这一点。它看不到带有
语句的主体。我正在尝试提供一种可用于模拟预期结果的替代方案。尽管我确实意识到这里可能有一个显著的区别:在这个问题中,\uuuuu exit\uuuuu
将在运行之前运行;在这里,它将在后面运行。此外,还不清楚是否真的需要with
来实现它的括号行为,而不是试图捕获一块代码以便稍后执行。