博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-类和对象(属性、方法)的动态绑定
阅读量:5998 次
发布时间:2019-06-20

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

  • 动态绑定

# coding=utf-8'''当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性'''from types import MethodTypeclass Student(object):    passdef set_age(self, age):    self.age = age    if __name__ == '__main__':    s = Student()    s.name = 'Michael'  # 动态给实例绑定一个属性    s.set_age = MethodType(set_age, s)  # 给实例绑定一个方法    print(s.name)    s.set_age(25)    print(s.age)        # 给一个实例绑定的方法,对另一个实例是不起作用的:    Student.set_age = MethodType(set_age, Student)  # 为了给所有实例都绑定方法,可以给class绑定方法:    s1 = Student()    s1.set_age(25)    print(s1.age)
  • 受限制的动态绑定

# coding=utf-8'''当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性'''class Student(object):    # 如果我们想要限制实例的属性怎么办?比如,只允许对Student实例动态添加name和age属性。    __slots__ = ('name', 'age')  # 用tuple定义允许绑定的属性名称    class GraduateStudent(Student):    passif __name__ == '__main__':    s = Student()    s.name = 'lky'    s.age = 25#     s.score = 100    print(s.name, s.age)    #     __slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的,除非在子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的__slots__。    g = GraduateStudent()    g.score = 100    g.name = 'mcs'    g.age = 26    print(g.name, g.age, g.score)

转载于:https://www.cnblogs.com/dmir/p/5162668.html

你可能感兴趣的文章
C#中Dynamic关键字
查看>>
空手套白狼,硬阅java字节码class文件
查看>>
C#: Get current keyboard layout\input language
查看>>
Android Studio 通过一个登录功能介绍SQLite数据库的使用
查看>>
C# Base64Helper
查看>>
Docker安装和常用命令
查看>>
Spring Security 之方法级的安全管控
查看>>
深入理解Java的接口和抽象类
查看>>
马的遍历进阶版--骑士巡游(添加了评估函数)[Teaks & xgluxv & r]
查看>>
给石头的诗
查看>>
T-SQL朝花夕拾(五) 动态T-SQL语句语法
查看>>
CGI编程读书笔记
查看>>
a标签的link、visited、hover、active的顺序
查看>>
OpenExpressApp:实体扩展属性系统 - 设计方案说明书
查看>>
图解Git
查看>>
杨中科 向HtmlAgilityPack道歉:解析HTML还是你好用
查看>>
【three.js练习程序】创建简单物理场景
查看>>
GridView, DataGrid 中,DataFormatString语法汇总
查看>>
静态成员与实例成员
查看>>
简单实用的操作RMS小例子
查看>>