2024-04-26 09:19:53 发布
网友
在Python中,有没有一种方法可以做到这样呢?在
class A(): var = "1, 2, 3" class B(): var = ... ", 4" instance = B() instance.var # = 1, 2, 3, 4
不能追加、替换,但可以用包含原始表达式的表达式替换:
class A(object): var = "1, 2, 3" class B(A): var = A.var + ", 4" instance = B() instance.var # = 1, 2, 3, 4
这样做只是为了简单的用途,但是更有趣的解决方案可能是使用描述符;简单的方法是使用property
property
它适用于B的实例,但不适用于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')
它在类上和在类的实例上同样有效
问题中给出的例子既没有使用超类,也没有使用实例变量。从问题的标题来看,你可能想同时使用这两种方法。下面是一个如何工作的示例:
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
请注意,只需使用不相关的类的属性来赋值。这是完全合理的,但不完全是你所要求的:
不能追加、替换,但可以用包含原始表达式的表达式替换:
这样做只是为了简单的用途,但是更有趣的解决方案可能是使用描述符;简单的方法是使用
^{pr2}$property
它适用于
B
的实例,但不适用于B
本身(如第一个示例所示)。要找回它,您必须实现自己的描述符:它在类上和在类的实例上同样有效
问题中给出的例子既没有使用超类,也没有使用实例变量。从问题的标题来看,你可能想同时使用这两种方法。下面是一个如何工作的示例:
请注意,只需使用不相关的类的属性来赋值。这是完全合理的,但不完全是你所要求的:
^{pr2}$相关问题 更多 >
编程相关推荐