没有合适的资源?快使用搜索试试~ 我知道了~
之前的文章跟大家讲解了鸭子类型,其实鸭子类型是编程语言中动态类型语言中的一种设计风格。今天跟大家一起谈谈动态语言的魅力。 根据维基百科,动态编程语言是这样子定义的: 动态编程语言是高级编程语言的一个类别,在计算机科学领域已被广泛应用。它是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。 动态语言是一门在运行时可以改变其结构的语言,这句话如何理解? 我们先看看示例1。 #示例1 class Person(object): def __init__(self,name=None,age=None): sel
资源详情
资源评论
资源推荐
Python动态语言之魅力大揭秘动态语言之魅力大揭秘
之前的文章跟大家讲解了鸭子类型,其实鸭子类型是编程语言中动态类型语言中的一种设计风格。今天跟大家一起谈谈动态语
言的魅力。
根据维基百科,动态编程语言是这样子定义的:
动态编程语言动态编程语言是高级编程语言的一个类别,在计算机科学领域已被广泛应用。它是一类在运行时可以改变其结构的语言:例如
新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。
动态语言是一门在运行时可以改变其结构的语言,这句话如何理解?
我们先看看示例1。
#示例1
class Person(object):
def __init__(self,name=None,age=None):
self.name = name
self.age = age
Jack = Person("Jack",18)
print(Jack.age)
在示例1中,我们定义了Person类,然后创建了Jack对象,打印对象的age属性,这没毛病。现实中人除了名字和年龄,还会
有其他属性,例如身高和体重。我们尝试打印一下身高属性。
print(Jack.height)
毫无疑问,这会报错,因为Person类中没有定义height属性。但是如果在程序运行的时候添加height属性,会发生什么呢?,
请看示例2和示例3。
#示例2
Jack.height = 170
print(Jack.height)
#输出结果:170
#示例3
setattr(Jack,'height',170)
print(Jack.height)
#输出结果:170
在示例2中,我们给Jack添加了height属性,然后打印,没有报错,可以输出结果。我们打印一下对象的属性。
print(Jack.__dict__)
#输出结果:
# {'name': 'Jack', 'age': 18, 'height': 170}
你看,本来对象是没有height属性,但是可以在程序运行过程中给实例动态绑定属性,这就是动态语言的魅力,不过还是有一
些坑的,我们再看看示例4。
#示例4
Mia = Person('Mia',18)
print(Mia.__dict__)
#输出结果:
# {'name': 'mia', 'age': 18}
奇怪!Mia对象居然没有height属性。为什么?事实上,在示例2中,我们只是给类示例类示例动态地绑定了一个属性,而不是给类类绑
定属性,所以重新创建的对象是没有height属性的。如果想要给类添加,也是可以的,见示例5。
#示例5
Person.height = None
Mia = Person("Mia",18)
print(Mia.height)
#输出结果:None
搞定了属性的动态绑定,其实动态删除也是同一个道理,请看示例5。
#示例5
Mia = Person("Mia",18)
delattr(Mia,'height')
print(Mia.__dict__)
#输出结果:{'name': 'mia', 'age': 18}
搞定了属性的动态绑定和删除,接下来看看方法的绑定和删除,请看示例6。
#示例6
weixin_38506852
- 粉丝: 5
- 资源: 889
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0