我想知道是否有更有效的方法将参数传递给所有子类都可以使用的父类。这是一个示例,其中myVar需要传递给a的所有子类。 (示例中只有子类是b)。我想知道是否有办法做到这一点,而不要求所有子类都作为参数传递myVar,其中myVar始终是同一个对象。也许有更高效系统的设计模式?感谢。
class a(object):
def __init__(self, myVar):
self.myVar = myVar
class b(a):
def __init__(self, myVar):
super(b, self).__init__(myVar)
class c(object):
def __init__(self, a):
print a.myVar
a = b(2)
d = c(a)
答案 0 :(得分:2)
您可以通过几种不同的方式完成此操作,具体取决于您正在尝试做什么。
如果您没有为您的类定义__init__
方法,它将自动继承父类的__init__
方法。 E.g:
class A(object):
def __init__(self, my_var):
self.my_var = my_var
class B(A):
pass
class c(object):
def __init__(self, a):
print(a.my_var)
a = B(2)
d = C(a)
如果您不想共享__init__
方法,可以尝试在父类上定义默认值。
class A(object):
DEFAULT_VALUE = 42
def __init__(self, my_var=None):
self.my_var = my_var or self.DEFAULT_VALUE
class B(A):
def __init__(foo, my_var=None):
super(B, self).__init__(foo, my_var)
class c(object):
def __init__(self, a):
print(a.my_var)
a = B(2)
d = C(a)
或者,使用全局变量。注意事项。
MY_VAR = None
class A(object):
def __init__(self, my_var=None):
global MY_VAR
if MY_VAR is None:
MY_VAR = my_var
elif my_var and MY_VAR != my_var:
print("WARNING: Value of {my_var} for `my_var` being ignored")
else:
pass
self.my_var = MY_VAR
class B(A):
def __init__(self, foo, my_var=None):
super(B, self).__init__(my_var)
self._foo = foo
class C(object):
def __init__(self, a):
print(a.my_var)
a = A(42)
b = B("bar")
c = C(b)
答案 1 :(得分:1)
您可以将myVar声明为类变量:
class a(object):
myVar = 2
def __init__(self):
...
class b(a):
def __init__(self):
super(b, self).__init__()
class c(object):
def __init__(self, a):
print(a.myVar)
a = b()
d = c(a)