zoukankan      html  css  js  c++  java
  • python中的namespace

     python中的名称空间是名称(标识符)到对象的映射。

    具体来说,python为模块、函数、类、对象保存一个字典(__dict__),里面就是重名称到对象的映射。

    可以参看下面python程序的输出:

    print('globals:')
    print(globals().keys())
    print('')
    x = 1
    print('globals after definition of x:')
    print(globals().keys())
    print('')
    if x == 1:
        y = 2
        z = 3
        print('globals inside if :%s' % (globals().keys()))
        print('locals inside if: %s' % (locals().keys()))
        del y
        print('locals after del: %s' % (locals().keys()))
    

    而在面向对象编程中,python与C++最大的差别之一就在于python中的namespace是可以动态变化的,类的成员,类实例的成员都可以动态添加,所做的不过是在相应的namespace字典中添加一项。这里特别指出的值,函数(成员函数或全局函数)也有自己的namespace字典,甚至可以动态添加

    class Test1(object):
        x = 1
        def __init__(self):
            self.y =  2
            self.z = 3
        def func(self):
            print('test')
        func.fx = 2
    print(Test1.__dict__)
    t1 = Test1()
    print(t1.__dict__)
    print(t1.func.__dict__)
    

     由此,我们可以理解一下,python中所谓的构造函数__init__所做的事情了,因为成员方法第一个传入的是self引用,相当于

    t1 = Test1()的时候调用Test1.__init__(t1),然后在构造函数里面添加了类实例t1的namespace字典项

  • 相关阅读:
    查看jvm的cg情况
    什么是json
    httpclient工具类
    mysql 优化思路(1)
    mysql存取日期出问题
    springboot和tomcat jar包冲突
    递归
    如何去理解return?
    js BOM判断当前窗口是否最顶层。
    个人笔记,关于ajax 如果没有请求成功不允许再次请求的方法。
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4607793.html
Copyright © 2011-2022 走看看