假设我有一些具有共同属性和方法的对象。但他们的方法只有相同的名称。不一样的行动。我可以这样做:
class class1():
att1 = ''
att2 = ''
....
def __init__(self, name, action):
self.name = name
self.action = action
def action1():
....
def action2():
....
obj1 = class1("name1", action1)
obj2 = class1("name2", action2)
但我发现它很难看。我必须编写像action1 action2这样的名字。即使我一遍又一遍地使用一个函数名称,我仍然认为它非常难看。 我也可以使用仍然需要我组成名字的继承。而且我觉得它更难看。 我能做什么?
PS:
在底线,我可以忘记所有课程,并写下:
jack_att1 = ....
jack_att2 = ....
def jack_action():
...........
joe_att1 = .....
joe_att2 = .....
def joe_action():
..........
建议一些比这更好的东西,而不是更糟。
PS:
例如,如果我可以写这个,我会很高兴:
class Person():
name = ''
....
def action(self, x):
pass
A = Person()
A.action(x):
.....
这样我就定义了我的函数体。但还没有起名。因为我的函数已经有了名字。但不幸的是,python不接受这个。
答案 0 :(得分:0)
我认为您需要一些模拟接口概念的东西,其中,您公开一个特定的名称(这是方法名称)并与从其继承的所有实例共享它。
在你的情况下,我会做这样的事情:
# defines your common attribute in it
class ActionInterface:
def action():
pass
class Class1(ActionInterface):
def action():
print('Action class 1') # do something Class1 specific
class Class2(ActionInterface):
def action():
print('Action class 2') # do something Class2 specific
使用此代码,您可以毫无问题地调用特定的类方法。
答案 1 :(得分:0)
如果您在实例化后创建以某种方式运行的类,则可以考虑实施__call__
方法,而不是某些特定的操作方法。使用乘法示例:
>>> class Mult():
... def __call__(self, a, b):
... return a * b
...
>>>
>>> a = Mult()
>>> a(2,3)
6