【问题标题】:How to change parent attribute in subclass python如何更改子类python中的父属性
【发布时间】:2016-02-20 11:40:48
【问题描述】:

我有以下课程

class Foo():
    data = "abc"

我把它子类化

class Bar(Foo):
    data +="def"

我正在尝试在子类中编辑父类属性。我希望我的父类有一些字符串,我的子类应该向该字符串添加一些额外的数据。它应该如何在 Python 中完成?我设计错了吗?

【问题讨论】:

    标签: python oop namespaces subclassing


    【解决方案1】:

    你问了两个问题:

    在 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'
    >>> 
    

    【讨论】:

    • 无法编辑,因为这么小的改动,但请务必添加结束引号。
    • 谢谢!顺便说一句,以这种方式将数据存储在类中是一种好习惯吗?
    【解决方案2】:

    您可以从 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
    

    【讨论】:

      【解决方案3】:

      您可以通过常规属性访问从 Bar 的命名空间中引用 Foo 的类变量:

      class Bar(Foo):
          data = Foo.data + 'def'
      

      我不知道这是否是一个好习惯,但没有理由说它不好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-07
        • 2020-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多