正在重写属性';在Python子类pythonic中键入?

正在重写属性';在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) >

我有一个带有属性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)
>>> 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的实例。