在python中访问一个类在另一个类中的私有变量。

问题描述 投票:0回答:2

我如何访问私有变量 "数字 "的 class B 在另 class A在下面的代码中?

    class A:
            def write(self):
                print("hi")

            'It should print the private variable number in class B'
            def check(self):
                print(B.get_number(self))'error occurs here'

        class B:
            def __init__(self,num):
                self.__number = num 

            'accessor method'
            def get_number(self):
                return self.__number

        #driver code        
        obj = B(100)
        a = A()
        a.write()
        a.check()

我得到的错误信息是 'A' object has no attribute '_B__number'

python python-3.x oop private
2个回答
3
投票

你可以通过改变 check 接收方法 B 对象。

试试吧

class A:
    def write(self):
        print("hi")

    def check(self,b):
        print(b.get_number())

class B:
    def __init__(self, num):
        self.__number = num

    'accessor method'

    def get_number(self):
        return self.__number

obj = B(100)
a = A()
a.write()
a.check(obj)

3
投票

在你的代码中,你想读取的是 __number 对象的领域 a 属于 A)而不是 obj 属于 B).

该指令 a.check() 基本上被翻译为 A.check(self=a). 这就意味着,里面的 check()-方法,然后您将调用 B.get_number(self=a)get_number()-因此,该方法试图返回 a.__number 不存在的)。

你可能想做的是这样。

    class A:
        def check(self, other):
            print(B.get_number(other)) # <- NOT "self"!

    class B:
        ...

    obj = B(100)
    a = A()
    a.write()
    a.check(obj)
© www.soinside.com 2019 - 2024. All rights reserved.