如何使用子类修改父类变量并在python中的另一个子类中使用

时间:2017-06-28 07:40:50

标签: python oop inheritance

Xapp1.latestDataArrays === ApplicationParser.prototype.latestDataArrays // false, as Xapp1.latestDataArrays is L1 now.
Xapp2.latestDataArrays === ApplicationParser.prototype.latestDataArrays // false, as Xapp2.latestDataArrays is L2 now.

有人可以解释一下我如何在我的' C'中的method_b中捕获已安装的值。类方法?

P.S。在这个变种中,我什么都没得到。

1 个答案:

答案 0 :(得分:2)

Python不是Java;你不需要setter& getters here:直接访问属性。

您的代码有三个问题。

  1. C.method_c()没有return语句,因此返回None

  2. 您正在使用__ name mangling,而这正是您想要的。

  3. A.set_a()中,您想要设置一个类属性,但是您的赋值会创建一个影响类属性的实例属性。

  4. 这是修复后的版本。

    class A(object):
        _A = 'nothing'
        def get_a(self):
            return self._A
        def set_a(self, value):
            A._A = value
    
    class B(A):
        def method_b(self, value):
            self.set_a(value)
    
    class C(A):
        def method_c(self):
            return self.get_a()
    
    b = B()
    c = C()
    print(c.method_c())
    b.method_b(13)
    print(c.method_c())
    

    <强>输出

    nothing
    13
    

    这是一个稍微更多的Pythonic版本:

    class A(object):
        _A = 'nothing'
    
    class B(A):
        def method_b(self, value):
            A._A = value
    
    class C(A):
        pass
    
    b = B()
    c = C()
    print(c._A)
    b.method_b(13)
    print(c._A)