根据维基百科,动态编程语言是这样定义的:动态编程语言是计算机科学领域广泛应用的高级编程语言的一类。它是一种结构可以在运行时更改的语言:例如,可以引入新函数、对象甚至代码,可以删除现有函数或进行其他结构更改。动态语言是一种结构可以在运行时改变的语言。怎么理解这句话?我们先看例1。#Example1classPerson(object):def__init__(self,name=None,age=None):例1中的self.name=nameself.age=ageJack=Person("Jack",18)print(Jack.age),我们定义了Person类,然后创建了Jack对象,打印了对象的age属性,这样就可以了。除了姓名和年龄,现实中的人还有其他属性,比如身高和体重。让我们尝试打印高度属性。print(Jack.height)毫无疑问这会报错,因为Person类中没有定义height属性。但是,如果在程序运行时添加height属性会怎样?,见例2和例3#例2Jack.height=170print(Jack.height)#Outputresult:170#例3setattr(Jack,'height',170)print(Jack.height)#Outputresult:170InExample2,我们添加了Jack身高属性,然后打印,没有报错,可以输出结果。让我们打印对象的属性。print(Jack.__dict__)#Outputresult:#{'name':'Jack','age':18,'height':170}你看,原来的对象是没有height属性的,但是可以给在程序运行过程中Instance动态绑定属性,这就是动态语言的魅力所在,但也有一些坑,我们再看一下例4。#Example4Mia=Person('Mia',18)print(Mia.__dict__)#Outputresult:#{'name':'mia','age':18}奇怪!Mia对象没有高度属性。为什么?事实上,在示例2中,我们只是动态绑定一个属性到类示例,而不是将属性绑定到类,所以重新创建的对象没有高度属性。如果要添加到类中,也是可以的,见例5#例5Person.height=NoneMia=Person("Mia",18)print(Mia.height)#输出结果:None处理动态绑定属性。其实动态删除也是一样的。请看例6。#Example6Mia=Person("Mia",18)delattr(Mia,'height')print(Mia.__dict__)#Outputresult:{'name':'mia','age':18}属性的动态都解决了绑定和删除,接下来看方法绑定和删除,见例7。#例7classPerson(object):def__init__(self,name=None,age=None):self.name=名称self.age=agedefspeak_name(self):print(self.name)Jack=Person("Jack",18)Jack.speak_name=speak_nameJack.speak_name(Jack)print(Jack.__dict__)Mia=Person("Mia",18)print(Mia.__dict__)输出结果:Jack{'name':'Jack','age':18,'speak':
