知行编程网知行编程网  2022-12-12 19:30 知行编程网 隐藏边栏  27 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于浅谈Python类命名空间的相关知识,包括python 类变量,以及python类名命名规则这些编程知识,希望对大家有参考作用。

浅谈Python类命名空间

Python 类就像命名空间。 Python程序默认在全局命名空间中,类体在类命名空间中。 Python 允许将可执行代码放在全局范围内。当Python执行程序时,这些代码就会有机会执行。同样,Python 也允许将可执行代码放在类范围内。当Python执行类定义弯头时,这些代码也会得到执行的机会。

例如,如下程序测试了类命名空间:

class Item:
    # 直接在类空间中放置执行性质代码
    print('正在定义Item类')
    for i in range(10):
        if i % 2 == 0 :
            print('偶数:', i)
        else:
            print('奇数:', i)

从上面的代码可以看出,程序将普通的输出语句、循环语句、分支语句直接放在Item类体中是合法的。当程序执行Item类时,会执行Item类命名空间中的这些代码。

从执行效果来看,这些可执行代码放在Python类命名空间和全局空间并没有太大区别。的确,这是因为程序没有定义“成员”(变量或函数),这些代码执行完就结束了,什么都不留下。

但是下面的代码是不同的。以下代码演示了分别在全局空间和类命名空间中定义 lambda 表达式:

global_fn = lambda p: print('执行lambda表达式,p参数: ', p)
class Category:
    cate_fn = lambda p: print('执行lambda表达式,p参数: ', p)
# 调用全局范围内的global_fn,为参数p传入参数值
global_fn('fkit')  # ①
c = Category()
# 调用类命名空间内的cate_fn,Python自动绑定第一个参数
c.cate_fn()  # ②

上面的程序分别在全局空间和类命名空间中定义了两个lambda表达式。定义在全局空间的lambda表达式相当于一个普通的函数,所以程序通过调用一个函数来调用lambda表达式,并为第一个参数显式绑定参数值,如上述程序中的代码①所示。

对于在类命名空间中定义的lambda表达式,相当于在类命名空间中定义了一个函数,而这个函数就成为了一个实例方法,所以程序必须通过调用方法来调用lambda表达式。 Python也会将参数值绑定到方法的第二个参数(相当于self参数),如上述程序中的代码②所示。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享