最近刚刚开始看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())