在Python中,有没有办法做这样的事情?
class A():
var = "1, 2, 3"
class B():
var = ... ", 4"
instance = B()
instance.var # = 1, 2, 3, 4
答案 0 :(得分:4)
问题中给出的示例既不使用超类也不使用实例变量。从问题的标题来看,大概你想要同时使用两者。以下是它如何工作的示例:
class A(object):
def __init__(self):
self.var = "1,2,3"
class B(A):
def __init__(self):
super(B,self).__init__()
self.var += ",4,5"
print A().var
print B().var
请注意,您的示例只是使用类排序类似命名空间将属性分配给不相关的类。这是完全合理的,但不完全是你问的:
class A:
var = "1,2,3"
class B:
var = A.var + ",4,5"
print A.var
print B.var
答案 1 :(得分:1)
你无法追加,你替换,但你可以用包含原文的表达式替换:
class A(object):
var = "1, 2, 3"
class B(A):
var = A.var + ", 4"
instance = B()
instance.var # = 1, 2, 3, 4
这是为了简单的用途,但更有趣的解决方案可能是使用描述符;简单的方法是使用property
class A(object):
var = "1, 2, 3"
class B(A):
_subvar = ", 4"
@property
def var(self):
return super(B, self).var + self._subvar
instance = B()
instance.var # = 1, 2, 3, 4
适用于B
的实例,但不适用于B
本身(如第一个示例中所示)。要实现这一点,您必须实现自己的描述符:
class Appender(object):
def __init__(self, cls, attr):
self.cls = cls
self.attr = attr
def __get__(self, instance, owner):
var = super(self.cls, owner).var
return var + getattr(self.cls, self.attr)
class B(A):
_realvar = ', 4'
B.var = Appender(B, '_realvar')
对于类,它在类
的实例上同样有效