从方法创建的 class 实例覆盖嵌套 class 的方法
Override method of nested class from method-created class instance
我正在使用 Python Docker SDK 向我的本地 docker 安装发送命令。
client = docker.from_env()
client.images.pull(repository=MY_IMAGE, tag="master")
我想做的是重写 .pull
方法,这样我就可以添加一个选项,这样它在某些情况下就不会拉。
最简单的方法是在每个 .pull
之前添加一个 if 语句
enable_pull=True
if enable_pull:
client.images.pull(...)
else:
pass
...但我想按原样保留代码,只是以某种方式重写该方法。我知道如何为“正常”配置执行此操作 - 例如覆盖 from_env()
很容易:
class MyClass(docker):
def from_env(self, *args, **kwargs):
# my code
return super().from_env()
但是我不知道如何覆盖 .pull
因为它是 .images
.
的方法
你这里有点train-wreck
:(放大说明)
docker.from_env().images.pull(repository=MY_IMAGE, tag="master")
所以像这样的东西应该隐藏在你自己的方法之一中:
def pull(self, *args, **kwargs):
docker.from_env().images.pull(*args, **kwargs)
并这样调用:
self.pull(repository=MY_IMAGE, tag="master")
但你想要 enable/disable,所以:
def pull(self, *args, **kwargs):
if self.enable_pull:
docker.from_env().images.pull(*args, **kwargs)
我正在使用 Python Docker SDK 向我的本地 docker 安装发送命令。
client = docker.from_env()
client.images.pull(repository=MY_IMAGE, tag="master")
我想做的是重写 .pull
方法,这样我就可以添加一个选项,这样它在某些情况下就不会拉。
最简单的方法是在每个 .pull
enable_pull=True
if enable_pull:
client.images.pull(...)
else:
pass
...但我想按原样保留代码,只是以某种方式重写该方法。我知道如何为“正常”配置执行此操作 - 例如覆盖 from_env()
很容易:
class MyClass(docker):
def from_env(self, *args, **kwargs):
# my code
return super().from_env()
但是我不知道如何覆盖 .pull
因为它是 .images
.
你这里有点train-wreck
:(放大说明)
docker.from_env().images.pull(repository=MY_IMAGE, tag="master")
所以像这样的东西应该隐藏在你自己的方法之一中:
def pull(self, *args, **kwargs):
docker.from_env().images.pull(*args, **kwargs)
并这样调用:
self.pull(repository=MY_IMAGE, tag="master")
但你想要 enable/disable,所以:
def pull(self, *args, **kwargs):
if self.enable_pull:
docker.from_env().images.pull(*args, **kwargs)