Skip to main content
 首页 » 编程设计

python之Python 2.5 的抽象类

2025年05月04日18pander-it

我目前正在重构一个定义客户端或服务器的类。类(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 方法传入任何对象。