Python类命名空间
Python 类体中的代码位于独立的命名空间(称为类命名空间)中。换句话说,所有用 class 关键字修饰的代码块,都可以看做是位于独立的命名空间中。
和类命名空间相对的是全局命名空间,即整个Python程序默认都位于全局命名空间中。而类体则独立位于类命名空间中。
类其实是由多个类属性和类方法构成,而类属性其实就是定义在类这个独立空间中的变量,而类方法其实就是定义在类空间中的函数,和定义在全局命名空间中的变量和函数相比,并没有明显的不同。
# 全局空间定义变量 name = "赛兔子" add = "https://www.cnblogs.com/qingchengzi" # 全局空间定义函数 def say(): print("我在学习Python--全局") class PLanguage: # 定义PLanguage空间的say函数 def say(): print("我在学习Python--PLanguage独立空间") # 定义CLanguage空间的catalog变量 name = "赛兔子" add = "https://www.cnblogs.com/qingchengzi/p/18055134" # 调用全局的变量和函数 print(name, add) say() # 调用类独立空间的变量和函数 print(PLanguage.name, PLanguage.add) PLanguage.say()
运行结果:
赛兔子 https://www.cnblogs.com/qingchengzi 我在学习Python--全局 赛兔子 https://www.cnblogs.com/qingchengzi/p/18055134 我在学习Python--PLanguage独立空间
甚至,Python 还允许直接在类命名空间中编写可执行程序(例如输出语句、分支语句等),例如:
class PLanguage: print('正在执行 PLanguage 类空间中的代码') for i in range(5): print(i)
运行结果:
正在执行 PLanguage 类空间中的代码
0
1
2
3
4
显然,上面这些位于类命名空间的可执行程序,和位于全局命令空间相比,并没有什么不同。
但需要注意的一点是,当使用类对象调用类方法时,在传参方面是和外界的函数有区别的,因为 Python 会自动会第一个参数绑定方法的调用者,而位于全局空间中的函数,则必须显式为第一个参数传递参数。
浙公网安备 33010602011771号