博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python类和实例方法和属性的动态绑定
阅读量:6121 次
发布时间:2019-06-21

本文共 990 字,大约阅读时间需要 3 分钟。

python中实例创建后可以给实例绑定任何属性和方法

class  Student(object):    pass

  给实例绑定一个属性:

s=Student()s.name='Michel'print s.name    #  Michel

  给实例绑定一个方法:

def  set_age(self,age):    self.age=age    from  types  import  MethodTypes.set_age=MethodType(set_age,s,Student)s.set_age(25)print  s.age  #25

  给实例绑定的方法,对另一个实例是不起作用的,为了给所有的实例都绑定方法,可以给class绑定方法

       给类绑定方法

def  set_score(self,score):    self.score=score    Student.set_score=MethodType(set_score,None,Student)s.set_score(100)print  s.score  #100s2=Student()s2.set_score(89)print s2.score   #89

  上面的set_score方法可以直接定义在class中,但动态绑定允许我们在程序运行的过程中动态给class加上功能

       __slots__限制class能添加的的属性

class People(object):    __slots__=('name','age')  #用tuple定义允许绑定的属性名称    p=People()p.name='Michel'p.age=23p.score=99  #绑定属性score

 由于score没有放到__slots__中,所以不能绑定score属性,此时会报错:AttributeError: 'People' object has no attribute 'score'

  __slots__定义的属性仅对当前的类起作用,对继承的子类是不起作用的,除非在子类中也定义__slots__,这样子类允许定义的属性就是自身的加上父类的

class GraduateStudent(Student):    passg=GraduateStudent()g.score=99

  

转载地址:http://jmgka.baihongyu.com/

你可能感兴趣的文章
计算机网络(2)
查看>>
windows下使用ofstream默认输出内存数据到文件中时,会自动将0A换成0A0D
查看>>
Nginx unit 源码安装初体验
查看>>
PTA基础编程题目集6-2多项式求值(函数题)
查看>>
哈佛医生帮你增强记忆力
查看>>
Cloudera Search配置
查看>>
[原译]类型安全的黑板模式(属性包)
查看>>
【转】python中的一维卷积conv1d和二维卷积conv2d
查看>>
写可测试的代码
查看>>
XML学习(C#创建XML)[转自他人文章,仅做学习之用]
查看>>
[LeetCode] Two Sum II - Input array is sorted
查看>>
js数组去重三种方法
查看>>
洛谷4147:玉蟾宫——题解
查看>>
tomcat 调优
查看>>
快速部署Python应用:Nginx+uWSGI配置详解
查看>>
js操纵css样式
查看>>
[转] 理解CheckPoint及其在Tensorflow & Keras & Pytorch中的使用
查看>>
第一次作业-准备篇
查看>>
C#.NET的微信功能开发学习
查看>>
第2章 传统与敏捷方法论
查看>>