我目前正在重构一个定义客户端或服务器的类。类(class)有很多
if client:
XXXXXXXXXXXX
elif server:
YYYYYYYYYYYY
所以我决定用类似的代码创建一个类 A,一个类 C 用于客户端,另一个类 S 用于继承 A 的服务器。(他们当然没有这些名称 ^^)
所以类 A 是某种抽象类。但问题是 Python 2.5 中没有抽象类,它是 2.6 版本自带的。所以我想知道是否有一种方法可以禁止 A 类的实例化。
一个解决方案是在类 A 的构造函数中引发 NotImplemented 错误,但 C 和 S 具有相同的代码,所以我将其放在“抽象”类 A 中(坏主意?)。
这可能看起来很愚蠢,但我只是偶尔用 Python 进行开发,而且我是一名年轻的程序员。 你有什么建议?
最佳答案
在静态类型语言中,您使用抽象基类 (ABC),因为您需要一些具有已定义大小、接口(interface)等的对象来传递。否则,无法编译试图调用该对象方法的代码。
Python 不是静态类型语言,调用代码根本不需要知道它调用的对象的类型。因此,您可以通过记录接口(interface)需求并直接在两个不相关的类中直接实现该接口(interface)来“定义”您的 ABC。
例如,
class Server:
def do_thing(self):
pass #do that server thing here
class Client:
def do_thing(self):
pass #do that client thing here
def do_thing(thingy):
thingy.do_thing() # is it a Client? a Server? something else?
s=Server()
c=Client()
do_thing(s)
do_thing(c)
在这里,您可以通过参数与调用相匹配的 do_thing 方法传入任何对象。
关于python - Python 2.5 的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6548228/