最近刚刚开始看python基础, 由于原来是使用java编程, 没有听到过 虚函数的概念, 虚函数的作用是实现动态联编, 类似于java的方法可以被子类重写的概念,是多态的一种表现。
而今天看python的命名空间的时候,就懵了,即便是虚函数,可也作为一个对象存在啊,在命名的字典中无法找到,着实无法理解,烦请高手们赐教!
以下是我的测试代码, 其中#1,说明 1代表执行步骤, 后面是说明。 主要问题的发生在11步骤上:
# -*- coding: gbk -*- """ 这是一个测试 namespcace的范例 """ print "第1次---testns全局_globals函数:" + str(globals()) #1, 字典里仅有基本的属性,貌似类似java的类装载一样先走了一遍通用属性(Object根类的加载?) print "第1次----testns全局_locals函数:" + str(locals()) #2, locals == golbals 的namespace def testns1(): print "testns1)_function_全局namespce:" + str(globals()) class Person: print "Pserson_globals()函数:" + str(globals()) #3-1, 字典里已包含testns1按照顺序生成的,还未包含Person print "Person_locals()函数:" + str(locals()) #3-2, 字典为:{'__module__': '__main__'},没有对应的方法 def __init__(a): print "Pserson对象_globals函数:" + str(globals()) print __name__ def sayhello(a): print "sayhello_globals()函数:" + str(globals()) #8, 与module的globals 相同 print "sayhello_locals()函数:" + str(locals()) #9, 本地只有p def checkSayHello(): print "checkSayHello_globals()函数:" + str(globals()) #10, 到这里已经证明全局globals都是同一个,即module的globals,后面无需再说明globals print "checkSayHello_locals()函数:" + str(locals()) #11, sayhello function 到底在哪里呢?,locals里没有(3-2步骤),globals里也没有 checkSayHello() def saidhello(a,b): print "saidhello里打着:"+ str(Person.sayhello) print "saidhello_locals函数:" + str(locals()) print "第2次---testns全局_globals函数:" + str(globals()) #4,字典里已包含testns1,Person,saidhello print "第2次----testns全局_locals函数:" + str(locals()) #5, 到这里已经证明module的locals和globals是相同的 testns1() #6, 与module的globals 相同 p = Person() #7, 与module的globals 相同 包含上了p p.sayhello() Person.sayhello = saidhello print "aaaaaaaaaaaaaaa:" + str(Person.sayhello) #12, <unbound method Person.saidhello> 说指定到了一个未绑定的function print "bbbbbbbbbbbbbbb:" + str(p.sayhello) #13, 绑定到p对象上的sayhello Person.sayhello(p,2) p.sayhello(1) print "testns全局_globals函数:" + str(globals()) print "testns全局_locals函数:" + str(locals())