python2 怎么继承多个不确定数量的类

2020-10-23 09:20:39 +08:00
 lynn0977
需求是想继承多个类,但是类的数量不确定。
对于 python3,可以直接把要继承的类放到一个列表中如 cls,然后按如下的方法继承:
class NewClass(*cls):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

对于 python2.7 按照这个写法好像是不行的,报错了,问一下 python2.7 要如何实现这个目的。
1686 次点击
所在节点    Python
4 条回复
mec
2020-10-23 10:00:30 +08:00
啊 这也行,太 magic 了 感觉类的继承最好还是更显式一些吧
chogath
2020-10-23 10:03:10 +08:00
用装饰器实现不行嘛,你这整的是啥
Wincer
2020-10-23 10:18:16 +08:00
Python2 也可以做到,但是比较麻烦:
1. 首先把 cls 里面的所有类改成新式类;
2. 使用 type('NewClass', cls, attr) 的方式创建。

```
class A(object):
pass
class B(object):
pass
class C(object):
pass

cls = (A, B, C)

def init(self, *args, **kwargs):
super(cls[0], self).__init__(*args, **kwargs)

type('E', cls, dict(__init__=init)) # 这样可以创建
>>> __main__.E
```

但是不太建议这么做,,你也看到代码多么复杂了,type 动态创建的类也不好 debug 。
xiaolinjia
2020-10-23 10:18:41 +08:00
用 types 函数创建类呗
NewClass = type('NewClass', tuple(cls), class_attrs)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/717689

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX