Python类和实例方法和属性的动态绑定
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 MethodType s.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 #100 s2=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=23
p.score=99 #绑定属性score
由于score没有放到__slots__中,所以不能绑定score属性,此时会报错:AttributeError: 'People' object has no attribute 'score'
__slots__定义的属性仅对当前的类起作用,对继承的子类是不起作用的,除非在子类中也定义__slots__,这样子类允许定义的属性就是自身的加上父类的
class GraduateStudent(Student):
pass g=GraduateStudent()
g.score=99
Python类和实例方法和属性的动态绑定的更多相关文章
- python类可以任意添加属性
python类可以任意添加属性 class A(object): def __init__(self): self.name = "zhangsan" self.age = 18 ...
- python 类和对象的属性
python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...
- Python类总结-字段,方法,属性区别及StaticMethod, Property,私有字段和私有属性
类包含下列 静态属性 动态属性 静态方法 动态方法 class Province: #静态字段--属于类,调用方法类.字段名 memo = "中国23个省之一" #动态字段--属于 ...
- python 类中的公有属性 私有属性 实例属性
class parent(): i=1 __j=2 class child(parent): m=3 __n=4 def __init__(self,age,name): self.age=age s ...
- python类的实例方法\静态方法\类方法区别解析(附代码)
前言 搞了好久python,一直搞得不太清楚这几种类的方法,今天花时间好好测试一下,算是弄懂点皮毛吧. 三种方法的不同 先剽窃个图看一下 可以看到,实例是三种方法都可以调用的,而类只可以调用两种.所以 ...
- 分别给Python类和实例增加属性和方法
#定义一个类Student class Student(object): pass #给类增加一个属性name Student.name = 'xm' print Student.name # xm ...
- Python类总结-封装(私有属性,方法)
封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...
- python类的实例方法、静态方法和类方法区别及其应用场景
https://blog.csdn.net/helloxiaozhe/article/details/79940321 普通实例方法,第一个参数需要是self,它表示一个具体的实例本身. 如果用了st ...
- python 类实例化,修改属性值
class User(object): def __init__(self, first_name, last_name, login_attempts): self.first_name = fir ...
随机推荐
- python系统编程(五)
多线程-threading python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用 1. 使用threading模块 ...
- servlet 表单加上multipart/form-data后request.getParameter获取NULL(已解决)
先上结论(可能不对,因为这是根据实践猜测而来,欢迎指正) 表单改为multipart/form-data传值后,数据就不能通过普通的request.getParameter获取. 文件和文件名通过Fi ...
- linux 时间同步的2种方法(转)
linux 时间同步的2种方法 张映 发表于 2012-10-23 分类目录: 服务器相关 标签:linux, ntp, 同步, 时间服务器 由于硬件的原因,机器或多或少的根标准时间对不上,一个月的误 ...
- Hibernate(12)_基于主键的双向1对1
一.基于主键的双向1对1 1.介绍: 基于主键的映射策略:指一端的主键生成器使用 foreign 策略,表明根据"对方"的主键来生成自己的主键,自己并不能独立生成主键. <p ...
- 更好用的excel国际化多语言导出
不知道大家在开发中有没有遇到过『excel导出』的需求,反正我最近写了不少这种功能,刚开始利用poi,一行行的手动塞数据,生成excel,而且还有国际化需求,比如:标题栏有一列,用户切换成" ...
- OCR库Tesseract初探
1.Tesseract 安装及使用 一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,与Microsoft Off ...
- CiscoIOUKeygen
python CiscoIOUKeygen.py | grep -A 1 ‘license’ > iourc
- 5月25号开学! 第13期《python3自动化测试selenium+接口》课程,python零基础也能学
2019年 第13期<python3自动化测试selenium+接口>课程,5月25号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:5月25号-7月28号,每周 ...
- ASP.NET Core WebApi
ASP.NET Core WebApi 创建项目 使用VS新建项目,选择ASP.NET Core WebAPI即可. 此时Startup的Configure.ConfigureService方法中如下 ...
- 众里寻他千百度?No!这项技术只需走两步就能“看穿”你!
电影<碟中谍5>中阿汤哥带上了面具,顺利通过指纹锁,三重物理等重重关卡,却最终仍旧功亏一篑,正是由于“ 火眼金睛 ”——步态识别 . (图片来源:碟中谍) 中国科学院自动化所的专家日前 ...