【发布时间】:2016-02-20 11:40:48
【问题描述】:
我有以下课程
class Foo():
data = "abc"
我把它子类化
class Bar(Foo):
data +="def"
我正在尝试在子类中编辑父类属性。我希望我的父类有一些字符串,我的子类应该向该字符串添加一些额外的数据。它应该如何在 Python 中完成?我设计错了吗?
【问题讨论】:
标签: python oop namespaces subclassing
我有以下课程
class Foo():
data = "abc"
我把它子类化
class Bar(Foo):
data +="def"
我正在尝试在子类中编辑父类属性。我希望我的父类有一些字符串,我的子类应该向该字符串添加一些额外的数据。它应该如何在 Python 中完成?我设计错了吗?
【问题讨论】:
标签: python oop namespaces subclassing
你问了两个问题:
在 Python 中应该如何完成?
class Bar(Foo):
data = Foo.data + "def"
我设计错了吗?
我通常不在 Python 中使用类变量。更典型的范例是初始化一个实例变量:
>>> class Foo(object):
... data = "abc"
...
>>> class Bar(Foo):
... def __init__(self):
... super(Bar, self).__init__()
... self.data += "def"
...
>>> b = Bar()
>>> b.data
'abcdef'
>>>
【讨论】:
您可以从 Bar 类初始化 Foo 类的状态,然后像这样附加到数据:
class Foo(object):
def __init__(self):
self.data = "abc"
class Bar(Foo):
def __init__(self):
super(Bar, self).__init__()
self.data += "def"
当你实例化一个 Bar 的实例时,产生的数据值是:
abcdef
【讨论】:
您可以通过常规属性访问从 Bar 的命名空间中引用 Foo 的类变量:
class Bar(Foo):
data = Foo.data + 'def'
我不知道这是否是一个好习惯,但没有理由说它不好。
【讨论】: