gpt4 book ai didi

python - 根据参数类型调用类 A 的方法

转载 作者:太空狗 更新时间:2023-10-30 02:35:36 25 4
gpt4 key购买 nike

class Class1(object):
...

class Class2(object):
...

class Class3(object):
...

class A(object):
def _methA(parm1, parm2)
...

def _methB(parm1, parm2)
...

def _methC(parm1, parm2)
...

def manager(parm1, method, params)
...
if parm1.__class__.__name__==Class1.__name__:
response = _methA(parm1, params)
elif parm1.__class__.__name__==Class2.__name__:
response = _methB(parm1, params)
elif io_source.__class__.__name__==Class3.__name__:
response = _methC(parm1, params)
else:
raise Exception, "Unsupported parm1"
...

我不喜欢 manager() 中的 if/elif block 的样子,并将其重构为:

def manager(parm1, method, params)
...
try:
response = {
Class1.__name__: lambda parm1, parms: _methA(parm1, parms),
Class2.__name__: lambda parm1, parms: _methB(parm1, parms),
Class3.__name__: lambda parm1, parms: _methC(parm1, parms)
}[parm1.__class__.__name__](parm1, parms)
except KeyError:
raise Exception, "Unsupported parm1"

但代码仍在查看类名这一事实让我很困扰——我真的不知道如何解释为什么……它应该让我困扰吗?

有没有更好的方法来编写代码来调用类 A 中的方法,根据其参数之一的类,触发 A 中不同方法的调用?

附言。很抱歉这个人为的例子,但发布实际代码会使问题更加复杂。我试图提炼出问题的本质......

最佳答案

这是实现多态性的许多错误方法之一。你不应该看类名。查看类名应该会困扰您,因为这意味着您没有正确委派责任。

将每个方法移动到适当的类中。

class Class1(object):
def method( self, theA, params ):
theA.methA( params )

class Class2(object):
def method( self, theA, params ):
theA.methB( params )

class Class3(object):
def method( self, theA, params ):
theA.methC( params )

class A(object):
def methA(parm1, parm2)
...

def methB(parm1, parm2)
...

def methC(parm1, parm2)
...

def manager(parm1, method, params)
...
param1.method( self, params )

关于python - 根据参数类型调用类 A 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928806/

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