gpt4 book ai didi

python - Python 中的构造函数和方法有什么不同,我可以将它们混合在一起吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:10 25 4
gpt4 key购买 nike

我实现了如下所示的可插入框架。

它有效,但我对 Plugin2 的实现感到困惑。似乎它使用普通方法而不是类构造函数。

我可以这样做吗?有什么缺点吗?

这是一个正常使用的“模式”吗?如果是,模式名称是什么? “鸭子打字”?我应该避免这样使用吗?

更新:我关心的是以下方法:

def addPlugin(name, plugin)

现在参数插件可以是类或方法。这对插件开发者来说有点晦涩难懂。这是动态编程语言世界中的常见情况吗?

class MyFramework(object):
_plugins = {}
_osType = None
@staticmethod
def addPlugin(name, plugin):
MyFramework._plugins[name]= plugin

def __init__(self, osType):
self._osType = osType
for name, plugin in MyFramework._plugins.items():
setattr(self, name, plugin(self, self._osType))

class Plugin1(object):
def __init__(self, owner, osType):
self.owner= owner
self.osType = osType
def hello(self):
print 'this is plugin1'

def Plugin2(owner, osType):
if (osType == "Linux"):
return Plugin2Linux(owner)
else:
return Plugin2Common(owner)

class Plugin2Linux(object):
def __init__(self, owner):
self.owner= owner
def hello(self):
print 'this is plugin2 Linux version'

class Plugin2Common(object):
def __init__(self, owner):
self.owner= owner
def hello(self):
print 'this is plugin2 common version'

MyFramework.addPlugin("plugin1", Plugin1)
MyFramework.addPlugin("plugin2", Plugin2)

framework = MyFramework("Linux")

plugin1 = getattr(framework, "plugin1")
plugin2 = getattr(framework, "plugin2")

plugin1.hello()
plugin2.hello()

最佳答案

这是一个经常使用的模式,称为 factory function .让您的接口(interface)对任何返回对象的可调用对象开放是个好主意,无论可调用对象是函数还是类。它使您可以灵活地应对 future 想做的任何事情。

关于python - Python 中的构造函数和方法有什么不同,我可以将它们混合在一起吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075634/

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