如何访问由实例变量隐藏的类变量?

时间:2018-07-18 07:03:53

标签: python python-3.x

我找不到我问题的具体答案。您可能知道,Python中的类可以同时具有类变量和实例变量。如果一个类具有相同名称的类变量和实例变量,那么如何在该类的另一种方法中访问这两个变量?

假设以下代码。如何访问两个变量myvar

class myclass:
    myvar = "class variable"

    def __init__(self):
        self.myvar = "instance variable"
        pass

    def test(self):
        # difference between self.myvar and myclass.myvar
        return self.myvar


class_instance = myclass()
print(class_instance.test())
print(class_instance.myvar)     # "class variable" or "instance variable"

在这里,如果我从myvar中删除__init__,则self.myvar将引用类变量,如果添加它,则self.myvar将引用实例变量。那么,实例变量优先于类变量的规则吗?我知道我可以使用myclass.myvar来引用类成员,但是在上述代码的最后一行class_instance.myvar会同时引用类变量和实例变量。

5 个答案:

答案 0 :(得分:1)

首先,我想您正在使用Python3。如果不是这种情况,则应将第一行更改为:class myclass(object)

要访问实例变量,可以使用:class_instance.myvar

要访问类变量,可以使用:type(class_instance).myvar

答案 1 :(得分:1)

实例化课程时,

some_class = myclass()

您基本上会覆盖myvar值(调用__init__构造函数时)

您可以使用以下代码进行观察-

class myclass:
    myvar = "class variable"
    def __init__(self):
        print(self.myvar) #added a print statement
        self.myvar = "instance variable"
        pass
    def test(self):
        # difference between self.myvar and myclass.myvar
        return self.myvar


class_instance = myclass() 
print(class_instance.test())
print(class_instance.myvar)

输出为-

class variable #due to print command
instance variable #command called after the overwriting of myvar variable
instance variable #command called after the overwriting of myvar variable

答案 2 :(得分:1)

Mate,我已经找到了找到它的另一种方法,当我看到它时,您就想到了,我想与您分享它,因为,我想您可能正在寻找这种解决方案:

使用下面编写的代码,您可以在两个相同的命名变量的前面加上一个下划线。

   class myclass:
    __myvar = "class variable"
    def __init__(self):
        self.myvar = "instance variable"
        pass
    def test(self):
        # difference between self.myvar and myclass.myvar
        return self.myvar


class_instance = myclass() 
print(class_instance.test())
print(class_instance._myclass__myvar)

答案 3 :(得分:0)

class myclass:
    myvar = "class variable"

    def __init__(self):
        self.myvar = "instance variable"
        pass
    def test2(self):
        return myclass.myvar


some_class = myclass()
print(some_class.test2())
print(some_class.myvar)

这可能会对您有所帮助!我们都找到了它们:)

答案 4 :(得分:0)

获取类变量所需要做的就是访问该类:

print(some_class.test2())
print(myclass.myvar)

或者,如果您在范围内没有该类:

print(some_class.test2())
print(type(someclass).myvar)