Python中类变量前边必须使用类名吗?有没有其他引用方式?
比如:
class Cname(Time):
classVar = 3
def d():
print(Cname.classVar) # 类变量前边必须使用列名来引用,有其他写法吗?
我的问题是:
类变量前边必须使用列名来引用,很不方便,比如修改类名或者类变量的名称,则要修改多出代码。
那么有没有其他方便的写法呢?
比如就像实例变量前使用 self 来引用一样。
Python中类变量前边必须使用类名吗?有没有其他引用方式?
10 回复
不一定必须用类名。类变量可以通过实例访问,但要注意优先级问题。
class MyClass:
class_var = "我是类变量"
def __init__(self, instance_var):
self.instance_var = instance_var
# 方式1:直接通过类名访问(最明确)
print(MyClass.class_var) # 输出:我是类变量
# 方式2:通过实例访问(当实例没有同名属性时)
obj = MyClass("实例变量")
print(obj.class_var) # 输出:我是类变量
# 方式3:在类方法中使用cls参数
class MyClass:
class_var = "类变量"
@classmethod
def show_var(cls):
return cls.class_var # 使用cls引用
print(MyClass.show_var()) # 输出:类变量
# 注意:当实例有同名属性时,优先访问实例属性
obj = MyClass("实例变量")
obj.class_var = "我覆盖了类变量" # 这会创建实例属性
print(obj.class_var) # 输出:我覆盖了类变量
print(MyClass.class_var) # 输出:我是类变量(类变量本身没变)
关键点:
- 类名.变量名:最直接、最明确的方式
- 实例.变量名:可以访问,但如果实例有同名属性会优先访问实例属性
- cls.变量名:在类方法中使用
- self.变量名:在实例方法中,如果没有同名实例属性,会找到类变量
建议:修改类变量时最好用类名,避免混淆。
不知道理解有没有问题,cls.classVar ?
要访问实例变量,使用 self。
要访问类变量,怎么写法?
cls.classVar 不行!
#4 self.classVar
这…有什么可简便的
还有上面的,他要的是类变量…
def m(cls):
cls.xxx


