我正在像这样在python中创建类:
class x(abstract_class, another_class):
@property
def do_something(self):
return something('a', 'x')
class y(abstract_class, another_class):
@property
def do_something(self):
return something('a', 'y')
更多类会发生这种情况。这似乎很长且不必要地重复,因为do_something
并不是每个类中唯一发生的事情。由于'x'
和'y'
如此相似,我有什么办法可以一次创建它们,也可以做其他任何事情来阻止重复?
答案 0 :(得分:2)
放入
def do_something(self):
return something('a', self.__class__.__name__)
在another_class
中,他们都可以继承它,因此您不必复制代码。
答案 1 :(得分:1)
由于您已经在使用多重继承,因此如果您不想(或无法)修改已经用作基类的两个现有类,则可以“做一些事情”。它基于@Charles Duffy在评论中发布的建议,并依赖于类已命名为__name__
的特殊属性。
注意:我还修改了您的代码,以遵循PEP 8 - Style Guide for Python Code的naming conventions。
class AbstractClass: pass
class AnotherClass: pass
def something(s1, s2):
print('something({!r}, {!r}) called'.format(s1, s2))
class Mixin: # Yet another class.
@property
def do_something(self):
something('a', self.__class__.__name__)
class X(AbstractClass, AnotherClass, Mixin):
pass
class Y(AbstractClass, AnotherClass, Mixin):
pass
if __name__ == '__main__':
x = X()
y = Y()
x.do_something # -> something('a', 'X') called
y.do_something # -> something('a', 'Y') called