小编Mar*_*ser的帖子

python中的构造函数专业化

类层次结构和构造函数是相关的.子类中的参数需要传递给它们的父类.

所以,在Python中,我们最终会得到这样的结果:

class Parent(object):
    def __init__(self, a, b, c, ka=None, kb=None, kc=None):
        # do something with a, b, c, ka, kb, kc

class Child(Parent):
    def __init__(self, a, b, c, d, e, f, ka=None, kb=None, kc=None, kd=None, ke=None, kf=None):
        super(Child, self).__init__(a, b, c, ka=ka, kb=kb, kc=kc)
        # do something with d, e, f, kd, ke, kf
Run Code Online (Sandbox Code Playgroud)

想象一下这有十几个子类和很多参数.添加新参数变得非常繁琐.

当然,可以完全省去命名参数并使用*args和**kwargs,但这会使方法声明变得模糊不清.

在Python(2.6)中是否有优雅处理这种模式?

"优雅"我的意思是我希望减少参数出现的次数.a,b,c,ka,kb,kc都出现3次:在Child构造函数中,在对Parent的super()调用中,以及在Parent构造函数中.

理想情况下,我想为Parent的init指定一次参数,而在Child的init中只指定其他参数.

我想做这样的事情:

class Parent(object):
    def __init__(self, a, b, c, ka=None, kb=None, kc=None):
        print 'Parent: ', a, b, …
Run Code Online (Sandbox Code Playgroud)

python oop design-patterns anti-patterns class

4
推荐指数
1
解决办法
1413
查看次数

标签 统计

anti-patterns ×1

class ×1

design-patterns ×1

oop ×1

python ×1