zoukankan      html  css  js  c++  java
  • 属性和方法的动态绑定和限制

    属性和方法的动态绑定

    定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义class:

    给实例绑定一个属性:

    给实例绑定一个方法:

    只是绑定这个单独的对象上,同类的其他实例化的对象的并没有受到影响。

    给类绑定一个方法:

    class Person:
        pass
    def set_class1(cls, class1):
        print("给类绑定了一个类方法")
        cls.class1 = class1
    
    
    def set_gender(self, gender):
        print("给类绑定了一个一般方法")
        self.gender = gender
    
    Person.set_class=MethodType(set_class1,Person)
    Person.set_gender=MethodType(set_gender,Person)
    Person.set_class("大一")
    Person.set_gender("")
    p=Person()
    p.set_gender("11")

    看来给类绑定一个一般方法也可以。。哈哈 其对象实例对象也能共享

    属性和方法的限制

    如果我们想要限制class的属性怎么办?比如,只允许对Student实例添加name和age属性。

    为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性:

    class Dog(object):
        __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
      
    d = Dog() # 创建新的实例
    d.name = 'Michael' # 绑定属性'name'
    d.age = 25 # 绑定属性'age'
    d.score = 99 # 绑定属性'score

     

                                   vs:

  • 相关阅读:
    CRC全套算法 CRC4,CRC5,CRC7,CRC8,CRC16,CRC32,CRC32 mpeg-2
    ubuntu18.04使用vscode报pylint is not install错误
    [转]C结构体之位域(位段/位域)
    获取gcc和clang的内置宏定义
    Win10下使用MinGW到指定路径编译C-C++文件
    【YM】ssh命令 远程登录Linux
    Linux环境下搭建Qt5.9开发环境
    WSL-Ubuntu-更换apt源为阿里源
    git常用命令
    Lucene的基本使用
  • 原文地址:https://www.cnblogs.com/wqbin/p/10395396.html
Copyright © 2011-2022 走看看