【发布时间】:2020-05-30 21:43:30
【问题描述】:
我有 3 个子类和 1 个父类,使子类共享一个通用方法。
例子:
class Animal:
def communicate():
pass
class Dog(Animal):
def communicate():
bark()
class Cat(Animal):
def communicate():
meow()
我想提供一个 API,它根据接收到的字符串实例化一只猫或一只狗,该字符串将是“猫”或“狗”并调用 .communicate(),但我不想写 if 和其他检查我是否应该运行 Dog() 或 Cat()。我想知道是否可以通过执行以下操作来吠叫或喵喵叫:
Animal("dog").communicate()
其中“dog”可以是变量。
或者如果可能的话,给子类一些标签,并能够通过这个标签,甚至通过自己的类名来实例化它们。
我的想法是不必每次定义新的子子类时都编写条件。
提前致谢!
【问题讨论】:
-
你的代码运行了吗?
communicate方法的 agruments 中的self在哪里?很抱歉这么说,但代码不能称为最小的可重现示例。但是你想要的是一个叫做Factory的模式,这里可以有更多的细节github.com/faif/python-patterns/blob/master/patterns/creational/…,你可以适应你的情况的代码。 -
这只是我用手机写的一个示例代码,我的项目也不是关于动物的。我会检查这家工厂,谢谢!
-
关于idea不是每次都写条件。这是一个棘手的事情,可以应用元类,或者使用这里的代码示例stackoverflow.com/questions/456672/class-factory-in-python
标签: python python-3.x