动态语言

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

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

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

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

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

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

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

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

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

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

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


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

import types


class 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("吃饭")


@staticmethod
def sleep():
    print("睡觉")

Person.sleep = sleep
Person.sleep()
Person.eat("None")

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

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

class Person(object):
    def eat(self):
        print("吃饭")


@classmethod
def drink(cls):
    print("喝水")
Person.drink = drink
Person.drink()
Person.eat("None")
给类绑定静态方法和绑定类方法是相同的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值