动态语言

来源:互联网 发布:网络大电影收益来源 编辑:程序博客网 时间:2024/04/28 13:41

这次我们说一下Python是一种动态语言。

所谓动态语言就是可以在运行时改变其结构语言,例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是在其他结构上的变化。

ok,基本的概念我们知道了,下面就用代码来演示一下加强对动态语言的理解。

运行过程中给对象添加一个属性

class Person(object):    def __init__(self, name, sex):        self.name = name        self.sex = sexp = Person("小明", "男")
这里我们定义了一个Person类,Person类里面有两个属性,name和male。但是我们我知道一个人的基本信息最起码应该有年龄,但是却没有在类中定义到,好了,现在动态语言就发挥它的威力了。

我们可以在运行的过程中给对象添加一个age属性

运行过程中给对添加一个属性

class Person(object):    def __init__(self, name, sex):        self.name = name        self.sex = sexPerson.age = 20p = Person("小明", "男")print(p.age)

运行过程中给类添加方法(实例方法)

这个与之前添加属性就有点不同了,需要使用types模块中的MethodType。

print(help(types.MethodType))
我们可以使用帮助来查看MethodType的用法


第一个参数传入函数名,第二个参数传入一个对象或实体,也就是传入的函数名绑定到了后面的对象上。

import typesclass Person(object):    def __init__(self, name, age):        self.name = name        self.age = age    def eat(self):        print("吃饭")def sleep(self):    print("我叫%s,我要睡觉" % self.name)p = Person("小明", 20)p.sleep = types.MethodType(sleep, p)p.sleep()
需要注意的是:绑定完对象后,需要使用p.sleep来进行接收之后才可以调用sleep方法

我们再来说说types.MethodType(sleep, p)这句话的意思

其实相当于给sleep函数传入参数p,然后再找个一个变量进行接收,变量名可以是任何的,但是我们为了让sleep与p进行绑定所以使用p接收。

p对象后面的.sleep 相当于在p对象中有一个变量叫做sleep,这时sleep也就指向了sleep函数。当我们使用p.sleep的时候就相当于调用了sleep函数

运行过程中给类绑定静态方法

class Person(object):    def eat(self):        print("吃饭")@staticmethoddef sleep():    print("睡觉")Person.sleep = sleepPerson.sleep()Person.eat("None")

格式:类名.绑定的函数名 = 绑定的函数名

运行过程中给类绑定类方法

class Person(object):    def eat(self):        print("吃饭")@classmethoddef drink(cls):    print("喝水")Person.drink = drinkPerson.drink()Person.eat("None")
给类绑定静态方法和绑定类方法是相同的。