python,用不同的方法制作不同的对象

时间:2014-08-17 14:49:22

标签: python

假设我有一些具有共同属性和方法的对象。但他们的方法只有相同的名称。不一样的行动。我可以这样做:

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不接受这个。

2 个答案:

答案 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