Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在不知道正确的派生类的情况下创建派生类的实例_Python_Oop - Fatal编程技术网

Python 在不知道正确的派生类的情况下创建派生类的实例

Python 在不知道正确的派生类的情况下创建派生类的实例,python,oop,Python,Oop,我有一个基本类的事件。有多个派生类,例如: NetworkEvent、IOEvent等。 每个事件都有一个表示特定事件类型的值,因此可能: 11 -> NetworkEvent (TCP send) 12 -> NetworkEvent (TCP receive) 14 -> IOEvent (File Open) 给定一个包含类型和连接到该类型的其他参数的事件,我想返回相应类的实例 例如: {"type": 11, "member1":"192.168.1.1",

我有一个基本类的事件。有多个派生类,例如: NetworkEvent、IOEvent等。 每个事件都有一个表示特定事件类型的值,因此可能:

11 -> NetworkEvent (TCP send)
12 -> NetworkEvent (TCP receive)
14 -> IOEvent      (File Open)
给定一个包含类型和连接到该类型的其他参数的事件,我想返回相应类的实例

例如:

{"type": 11, "member1":"192.168.1.1", "member2":80}
将返回IP地址为192.168.1.1:80的NetworkEvent实例

{"type": 14, "member1":"C:\temp\file.txt", "member2":"DOMAIN\user"}
将返回文件“C:\temp\file.txt”的IOEvent,其中包含用户域\用户(根据类型id解析)

在python中这样做的正确方法是什么? 我假设理解类型(11、12等)的逻辑应该在事件类中,对吗


我没有尝试任何具体的方法,因为这主要是关于设计的正确性。

我建议使用一个工厂函数,它接受字典作为参数-这可以检查给定字典的“type”值,然后构造并返回相应事件子类的实例。

嘿,我认为这也是一种方法,但是我看到一些评论说基类不应该知道派生类。也许这是我们可以稍微“打破规则”的例子之一。我考虑将factory类作为@classmethod-->使用,这合理吗?factory函数不一定必须是基类的成员—它可以在自己的类中,也可以根本不在类中