Python 组合中此继承问题的解决方案
我有一个python的具体类Python 组合中此继承问题的解决方案,python,oop,inheritance,composition,Python,Oop,Inheritance,Composition,我有一个python的具体类 class base def a(): pass def b(): pass def c(): pass . . def z(): pass 我希望有n个具有相同方法集但不同实现的类似类(3-4个方法几乎没有区别) 因为我想重用代码,所以我正在考虑继承 class child1(base): def b(): pass d
class base
def a():
pass
def b():
pass
def c():
pass
.
.
def z():
pass
我希望有n个具有相同方法集但不同实现的类似类(3-4个方法几乎没有区别)
因为我想重用代码,所以我正在考虑继承
class child1(base):
def b():
pass
def c():
pass
class child2(base):
def g():
pass
def z():
pass
def i():
pass
def j():
pass
class child3(base):
def b():
pass
问题:
这并不违反liskov替代原则,因为前提和条件是相同的。
但我不想使用继承
如何通过组合实现这一点,从而最大限度地提高可重用性?是这样的吗
#abstract class
class a:
def foo()
class a1(a):
def foo():
pass
class a2(a):
def foo():
pass
#abstract class
class b:
def foo()
class b1(b):
def foo():
pass
class child1:
obj1 = a2()
obj2 = b1()
.
.
obj3 = z5()
def a():
obj1.foo()
.
.
def z():
obj26.foo()
对于上述方法,我需要更多的类和逻辑到工厂逻辑来创建它们的对象。如果我添加更多的子类,这个扩展会很好。
或者我甚至需要课程来解决这个问题?还有其他python方法可以解决这个问题吗?如果您不想使用继承,这里有一个建议:
# implementations of all methods:
def a1():
print("a1")
def a2():
print("a2")
def b1():
print("b1")
def b2():
print("b2")
# only one class needed
class Flexi:
def __init__(self, funcs):
for name, func in funcs.items():
setattr(self, name, func)
def a(self):
pass
def b(self):
pass
然后,在某种工厂中结合多种方法构建一个Flexi实例:
def create_flexi():
funcs = {"a": a2, "b": b1}
return Flexi(funcs)
example = create_flexi()
example.a()
example.b()
请发布有效的Python代码<代码>/在Python中不是注释,垂直点也不是注释。(如果要指示任意代码块,请使用一个省略号(
…
)本身是有效语句。注释本身不是有效的函数体;请使用pass。这不是您可以概括的内容。使用Inherenence还是composition取决于类是某个内容还是仅使用它。Addition是HttpClient使用连接时的操作,即使它们共享接口的一部分。Wi虽然不知道你的类或者这些方法应该做什么,但是不可能知道你是否违反了Liskov替换原则。计算机科学是一门艺术,而不是一门科学。看起来你的类只是一些方法的集合。这是对的吗?@Wups这里的问题我有一个共同的界面e和实现不同,除了少数方法外,大多数方法都有相同的实现。假设前提条件和后条件相同,使用继承并重写子类中已实现类的方法是否违反liskov替换原则