随笔 - 86  文章 - 5  评论 - 11  阅读 - 10万 

一、动态扩展类与实例

  python作为一种动态语言,除了可以在定义类时定义属性和方法外,还可以动态的为已经创建的对象绑定新的属性和方法。

  在给对象绑定方法时,需要使用types模块中的MethodType方法,其第一个参数是要绑定的参数名第二个参数是绑定的对象名

例:绑定新方法实例。

复制代码
from types import MethodType    #从types模块中导入MethodType方法
class Student:    #定义学生类
    pass
def SetName(self,name):    #定义SetName函数
    self.name=name
def SetSno(self,sno):    #定义SetSno函数
    self.sno=sno
if __name__=='__main__':
    stu1 = Student()    #定义Student类对象stu1
    stu2 = Student()    #定义Student类对象stu2
    stu1.SetName=MethodType(SetName,stu1)    #为stu1对象绑SetName方法
    Student.SetSno=SetSno    #为Student类绑定SetSno方法
    stu1.SetName('李晓明')
    stu1.SetSno('1810100')
    #stu2.SetName('张刚')    #取消注释则会报错
    stu2.SetSno('1810101')
复制代码

提示:给一个对象绑定方法后,只能通过该对象调用该方法,其他未绑定该方法的对象则不能调用,例如,没有stu2对象绑定SetName方法,因此,如果将第15行前面的注释取消,则程序运行时系统会报错。而第12行为Student类绑定了SetSno方法,则Student类中的所有实例对象都有该方法。

二、__slots__变量

  在定义类时,Python提供了__slots__变量以限制可动态扩展的属性。

  __slots__中所做的动态扩展属性限制只对__slots__所在类的实例对象有效。

  如果子类中没有__slots__定义,则子类的实例对象可以进行任意属性的动态扩展。如果子类中有__slots__定义,则子类的实例对象可动态扩展的属性包括子类中通过__slots__定义的属性和其父类中通过__slots__定义的属性

例:__slots__使用示例

复制代码
class Person: #定义Person类 
    __slots__ = ('name') #定义允许动态扩展的属性 
class Student(Person): #以Person类作为父类定义子类Student类 
    __slots__ = ('sno') #定义允许动态扩展的属性 
class Postgraduate(Student): #以Student类作为父类定义子类Postgraduate类 
    pass
if __name__=='__main__': 
    stu=Student() #定义Student类对象stu 
    stu.sno='1810100' #为stu对象动态扩展属性sno 
    stu.name='李晓明' #为stu对象动态扩展属性name 
    #stu.tutor='马红' #取消前面的注释符则会报错
    pg=Postgraduate() #定义Postgraduate类对象pg 
    pg.sno='1810101' #为pg对象动态扩展属性sno 
    pg.name='张刚' #为pg对象动态扩展属性name 
    pg.tutor='马红' #为pg对象动态扩展属性tutor
复制代码

 

posted on   史振兴  阅读(321)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示