class classA:
def common(self):
print('A')
class classB:
def common(self):
print('B')
class classC:
def workflow(self):
print('Do something')
self.common()
print('Do something else')
A = classC() # Here I want to create classC that inherits from classA
A.workflow()
assert isinstance(A, classA)
B = classC() # Here I want to create classC that inherits from classB
B.workflow()
assert isinstance(B, classB)
在这个例子中,我有classA并且classB都实现了一个common()输出不同值的函数。我希望classC继承其中一个类,这些类的workflow()行为会略有不同,具体取决于common()它继承的方法。这样做的主要目标是使用一种workflow()方法,其中self.common()更改的结果取决于继承。
如何classC在实例化时选择继承的类classC?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要执行任务,请执行以下操作:
获取列名列表:
cc = df.columns
创建分组映射。目标列会C0,C1...:
grp = { cc[i] : 'C' + str(i // 5) for i in range(len(cc)) }
定义加入功能(的系列转换INT到的系列STR和将它们连接起来:
def myJoin(x):
return ''.join(x.astype(str).values)
最后,执行您的加入:
df.groupby(grp, axis=1).agg(lambda x: myJoin(x))
出于演示目的,我创建了测试DataFrame:
D1-7 D1-8 D1-9 D1-10 D1-11 D2-7 D2-8 D2-9 D2-10 D2-11
0 1 2 3 4 5 6 7 8 9 0
1 0 1 2 3 4 5 6 7 8 9
结果是:
C0 C1
0 12345 67890
1 01234 56789
您不能为单个对象选择不同的父类; 类处理继承。也就是说,您可以直接使用按需创建新类type。你不会使用classC直接,但一个子类,从两者继承classC和适当的一个classA和classB,治疗两成混合式课程。
a = type("pick-a-name", (classC, classA), {})()
b = type("pick-a-name", (classC, classB), {})()
你会注意到这里有一个额外的开销,因为每次你尝试实例化一个对象时,你必须先创建一个新类。您也可以立即定义子类。
class Ca(classC, classA):
pass
class Cb(classC, classB):
pass
评论
全部评论 (0)
评论