倒数第四句a._MyClass_id=“0573”是啥意思

img


倒数第四句a._MyClass_id=“0573”是啥意思 怎么MyClass前面还有个下划线 是私有变量的意思吗 私有变量咋还可以print在类外部输出啊

倒数第四句代码是给对象a的一个属性赋值,属性名为"_MyClass_id",属性值为"0573"。这里的"_MyClass_id"并不是类MyClass的私有变量,因为Python中并没有严格的私有变量的概念,只是约定俗成的用下划线开头的变量名表示类的私有变量。但是这并不阻止外部代码直接访问和修改这些变量。

在这段代码中,"_MyClass_id"是一个普通的实例属性,因为它是在对象a上定义的。所以在类外部也可以通过对象a来访问和修改这个属性。最后一句代码输出的是对象a的属性"_MyClass_id"的值,即"0573"。

另外,类MyClass中的"_ID"是一个类属性,它被所有实例共享。在init方法中,将传入的"id"赋值给实例属性"_id",将传入的"ID"赋值给类属性"_ID"。在info方法中,输出类属性"_ID"的值。因此,最后一句代码输出的是类属性"_ID"的值,即"0579"。

  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    在Python中,以双下划线(__)开头并以双下划线结尾的名称是私有的。这是一种机制,防止直接访问类中的变量和方法,并且应该遵循“脆窗户规则”,即不要直接更改私有变量。

    对于a._MyClass_id = “0573”,这是在类外部直接设置私有变量的值,但实际上它是不应该这样做的,这是一个违反私有变量机制的例子。

    下面是示例代码,展示如何创建类和私有变量:

    class MyClass:
        def __init__(self):
            self.__MyClass_id = ""
    
        def set_id(self, id):
            self.__MyClass_id = id
    
        def print_id(self):
            print(self.__MyClass_id)
    
    a = MyClass()
    a.set_id("0573")
    a.print_id() # 输出 "0573"
    print(a.__MyClass_id) # 此行代码会出错,不能直接访问私有变量
    

    在上述代码中,我们定义了一个类MyClass,并将其初始化时MyClass_id设为空字符串。在set_id()函数中,我们用一个参数来设置MyClass_id的值,同时在print_id()函数中打印输出该值。

    此外,我们将MyClass_id定义为私有变量,以双下划线开头。这意味着该变量不能从类的外部直接获取或更改。如果我们尝试这样做,代码将会出错。因此,我们需要定义访问私有变量的函数,例如set_id()和print_id()。

    回到问题中的代码片段,我们可以看到_MyClass_id这个书写方式并不是Python中的私有变量的正确写法,应该是__MyClass_id。所以代码中的_MyClass_id其实不是一个私有变量,可以在类外部被访问。