美文网首页
Python的动态性

Python的动态性

作者: Rokkia | 来源:发表于2016-10-10 11:29 被阅读622次

最近经常接触python中动态一词,python的动态性可以说是python的一大特点,但是总给我一种太过灵活驾驭不了的感觉,所以想做一下总结。

1.类中属性的动态绑定

初见动态性的强大

class newClass(object):
    def __init__(self):
        pass
#给classA动态绑定一个num
classA = newClass()
classA.num = 10
#输出classA的num属性
print classA.num
10

第一次看第一反应是,不应该是报错嘛 ?classA.num哪里来的?还能使用?自己试过几次发现:真没报错。classA真的就多了这么一个属性。还这能使用,而且classA不灭,num就存在

好奇,classA有num,如果我创建个classB呢

classB = newClass()
classB.num

AttributeError: 'classD' object has no attribute 'num2'

果然这是classA专属
除了属性还有方法,是否可以动态绑定方法呢

2.类中方法的动态绑定
#首先来创建一个方法
def set_age(self,age):   #不要忘了方法要给self哦
    self.age = age
#还是classA
classA.set_age = set_age
#没问题,貌似可以
classA.set_age(18)
#boom  报错,说少给一个参数,没少给啊,难道self也是一个参数?
TypeError: set_age() takes exactly 2 arguments (1 given)
classA.set_age(18,18)
#boom 报错,说int没有age这个属性
AttributeError: 'int' object has no attribute 'age'

根据问题分析self在set_age里确实是一个参数,而且需要填入,这跟平时使用的方法完全不同,也就是说classA并没有绑定方法,更像是绑定了一个函数
是否不能绑定了,是可以的,可以这样做

from types import MethodType
#通过MethodType来绑定方法
classA.set_age = MethodType(set_age,classA)
#试验一下
classA.set_age(20)
classA.age
#确定已经成为20了
20

看样子可以了,让我们试验下被我们遗忘的classB

classB.set_age(20)
#boom 报错  没有这个set_age属性 ?
AttributeError: 'classD' object has no attribute 'set_age'

看来只是给classA这个实例赋值了
要是想所有的实例都有怎么办呢

#直接将这个方法赋值给newClass这个类
newClass.set_age = set_age
#当你动态绑定完成之后,你可以直接使用,不用再重新声明classB
classB.set_age(21)
classB.age
21

成功了!
通过上面这种方法绑定,你会发现,在动态绑定方法同时,还设置了属性,实在有点强大。
但是这种方式貌似只适用于绑定私有属性和普通属性,如果想要设定类属性可以直接给类动态绑定。

#绑定类属性
newClass.biggestAge = 0

本文只是对自己平时学习的总结,如有不对的地方,还望各位指出,一起交流学习

相关文章

  • 撸一个简单的Python模板引擎来生成代码

    模板 利用python的动态性,动态生成脚本代码利用python的语法,支持一定的结构:for ,if ;方法调用...

  • Python的动态性

    最近经常接触python中动态一词,python的动态性可以说是python的一大特点,但是总给我一种太过灵活驾驭...

  • 当 Python 中混进一只薛定谔的猫……

    Python 是一门强大的动态语言,那动态体现在哪里,强大又体现在哪里呢? 除了好的方面,Python 的动态性是...

  • Python 环境搭建

    一、Python 基础 Python 是一门动态强类型,结合了解释性、编译性、互动性的高级语言。编写时无需定义变量...

  • Python动态语言的体现

    Python作为一门动态语言 ,他的动态性体现在可以动态给对象添加属性 和方法。 1,通过TypeMethod方法...

  • 分分钟学会Python&tornado(装一下)

    一:python 1.什么是python? python是一种解释性的、面向对象、动态数据类型的高级语言 编译—》...

  • Python学习第一天

    Python的安装环境 python动态类型的解释性语言,被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地...

  • 初识Python(2018-8-5)

    目录 一、Python的定义以及优缺点 1.定义 Python是一种面向对象的解释性高级编程语言,具有动态语义。 ...

  • 从零开始啃文档学习Rust

    为什么是Rust? 我非常喜欢Python的动态性,它让编程的我更有话语权。但Python所覆盖的范围是应用级,而...

  • Python基础语法记录

    Python Python是一种动态的解释性语言,相对于C、C++等静态编译型语言来说,更加的灵活易用,搭配丰富的...

网友评论

      本文标题:Python的动态性

      本文链接:https://www.haomeiwen.com/subject/txwmyttx.html