我找不到我问题的具体答案。您可能知道,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
会同时引用类变量和实例变量。
答案 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)