• python 限制绑定(__slots__)与动态绑定MethodType


    (一)Methodtype(基于实例的动态绑定)

     1 class Student:
     2     pass
     3 def set_name(self, name):
     4     self.name = name
     5 
     6 s1 = Student()
     7 s2 = Student()
     8 s3 = Student()
     9 #----start 将方法绑定在类实例上
    10 # s1.set_name = MethodType(set_name,s1,Student)  #py2是三个参数
    11 # s2.set_name = MethodType(set_name,s2,Student)
    12 s1.set_name = MethodType(set_name,s1)  #py3是两个参数
    13 s2.set_name = MethodType(set_name,s2)
    14 #-----end 将方法绑定在类实例上
    15 s1.set_name('tom')
    16 s2.set_name('tony')
    17 print(s1.name,s2.name,) #tom tony
    18 print(s3.name) #报错,因为那个s3对象并没有设置绑定(注意,对象是独立)
    实例动态绑定

    (一)Methodtype(基于类的动态绑定)

     1 #coding: utf8
     2 from types import  MethodType
     3 """
     4 :::::::::::::::动态绑定:::::::
     5 MethodType:
     6  用MethodType将方法绑定到类,并不是将这个方法直接写到类内部,
     7  而是在内存中创建一个link指向外部的方法,在创建实例的时候这个link也会被复制
     8 """
     9 class Student:
    10     pass
    11 def set_name(self, name):
    12     self.name = name
    13 s1 = Student()
    14 s2 = Student()
    15 s3 = Student()
    16 s31 = Student()
    17 #将set_name方法绑定到类上
    18 Student.set_name = MethodType(set_name,Student)
    19 s1.set_name('tom')
    20 s2.set_name('tony')
    21 
    22 print(s1.name,s3.name,s31.name)#('tony', 'tony', 'tony')
    23 print("1111111111111111111111111")
    基于类动态绑定

    (二) __slots__限制绑定

     1 class Foo:
     2     """:::::::::::::::__slots__限制绑定::::::::::::::"""
     3     __slots__ = ['x','y','name']  #严格按这的定义
     4     def __init__(self,name):
     5         self.name = name
     6 
     7 f = Foo('pite')
     8 f.x = 10
     9 # print(f.__dict__) #如果一个对象所属类里有定义__slots,那么此对象没收有__dict__属性
    10 print(f.x)
    11 f1 = Foo('tier')
    12 f1.x = 100
    13 f1.y = 200
    14 print(f1.x,f1.y)
    15 print(Foo.__dict__)#这个类就有__dict__
    slots限制绑定
  • 相关阅读:
    前端模块的前生今世
    variable fonts
    node
    webpack tree shaking
    es6 proxy浅析
    如何实现优美的骨架屏
    阿里巴巴Java开发手册建议创建HashMap时设置初始化容量,但是多少合适呢?
    新来个技术总监,禁止我们使用Lombok!
    2020年Java程序员应该学习的10大技术
    为啥HashMap的默认容量是16?
  • 原文地址:https://www.cnblogs.com/hongyongshang/p/6764130.html
Copyright © 2020-2023  润新知