当前位置: 首页 > 后端技术 > Python

Python动态语言的魅力展露

时间:2023-03-26 14:51:35 Python

根据维基百科,动态编程语言是这样定义的:动态编程语言是计算机科学领域广泛应用的高级编程语言的一类。它是一种结构可以在运行时更改的语言:例如,可以引入新函数、对象甚至代码,可以删除现有函数或进行其他结构更改。动态语言是一种结构可以在运行时改变的语言。怎么理解这句话?我们先看例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':}{'name':'Mia','age':18}在示例6中,speak函数已成功添加到对象Jack的属性中。但!有没有觉得例6中Jack.speak_name(Jack)这个语句很别扭。按照常理,应该是Jack.speak_name()。如果你想达到这个效果,你应该像下面那样做。importtypesJack.speak_name=types.MethodType(speak_name,Jack)Jack.speak_name()#Outputresult:Jack其中MethodType用于绑定方法对象。当然,例6是将方法绑定到类的例子中,但是如果要将方法绑定到类上,该怎么办呢?参见示例8。#Example8importtypesclassPerson(object):def__init__(self,name=None,age=None):self.name=nameself.age=agedefspeak_ok(cls):print(OK)Person.speak_name=types.MethodType(speak_ok,Person)Person.speak_ok()#Outputresult:OK例1-7为大家分析了维基百科对动态语言的定义,希望对大家理解Python有所帮助。下面说说比较容易混淆的概念。动态类型语言和动态语言其实动态类型语言和动态语言是不同的概念。动态类型语言是指只在运行时判断数据类型的语言,强调数据类型。动态语言是指结构可以在运行时改变的语言,强调代码结构。静态类型语言和staticlanguage静态类型语言是指在运行前(编译时)对数据类型进行判断,强调数据类型的语言。静态语言是指在运行时结构不能改变的语言,强调代码结构。公众号:CVpython专注于Python和计算机视觉的分享。我们坚持原创,不时更新。希望我们的文章能给您带来启发,共同进步。