在类外更改类属性值

我有一个这样的图书馆:

class Robot:
    __counter = 0

    @classmethod
    def get_c(cls):
        result = cls.__counter + 1
        return result

我试图通过初始化类属性 __counter = 1 来访问这个类,所以我可以从 get_c() 函数中得到 2。这就是我所做的:

Robot.__counter = 1
x = Robot()
x.get_c()

为什么结果仍然是 1 以及在不接触班级内部的情况下做我想做的事情的解决方案是什么,谢谢!

回答

您已经使用了双下划线 name-mangling。每次你这样做时都会翻译:

__some_var

在类定义内进入:

_MyClass__some_var

这就是重点——避免子类中的名称冲突。

如果您想在类外访问它,请不要使用双下划线名称修改。

我不确定你所说的“没有在内部接触班级”是什么意思,但在这种情况下:

Robot._Robot__counter = 1

起作用,尽管执行上述操作表明您不应该使用双下划线名称修改。

顺便说一句,这并不等同于具有访问修饰符的语言中的“私有”,尽管它对于有限的用例具有相同的目的,防止子类中的意外名称冲突。


以上是在类外更改类属性值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>