正在重写属性';在Python子类pythonic中键入?
我有一个带有属性x的python类(p),我用它在实例化p实例的代码中存储一个值。然后,在类p(Q)的子类中,我重写(正确命名?)x来存储一个值列表。这感觉就像是一个利用Python动态类型的例子。但这是蟒蛇式的吗正在重写属性';在Python子类pythonic中键入?,python,oop,Python,Oop,我有一个带有属性x的python类(p),我用它在实例化p实例的代码中存储一个值。然后,在类p(Q)的子类中,我重写(正确命名?)x来存储一个值列表。这感觉就像是一个利用Python动态类型的例子。但这是蟒蛇式的吗 class P: def __init__(self,x): self.x = x class Q(P): def __init__(self,x): self.x = [x] >>> p = P(1) >
class P:
def __init__(self,x):
self.x = x
class Q(P):
def __init__(self,x):
self.x = [x]
>>> p = P(1)
>>> p.x
1
>>> q = Q(1)
>>> q.x
[1]
>>>
因此,使用这种方法似乎并不太符合Python,因为它打破了Liskov的可替代性和最小惊喜的概念。取决于上下文,但它很可能会打破Liskov的可替代性。它有点不符合Python,因为它打破了最小惊喜的概念。Q继承自P。如果
P.x
不是一个列表,用户会惊讶地发现Q.x
是一个列表。仅为我的具体案例提供一点上下文:类P不包含依赖于x的特定类型的方法。一个单独的类X,对P的实例执行操作,并依赖于X是单个值。类X将并且永远不会使用类Q的实例。