• 18-面向对象之语法(3)


    1. 为instance动态增加属性和方法{对象层次的}

    class Student(object):
        pass
    s1 = Student()
    #给s1新增属性
    s1.name = 'haozhang'
    print(s1.name,'
    ')
    #给s1新增方法
    def SetAge(self,age): #此处同时还新增了实例属性属性age
        self.age = age
    from types import MethodType
    s1.SetAge = MethodType(SetAge, s1)
    
    s1.SetAge(120) #活到120,哈哈哈
    print(s1.age, '
    ')
    

    2. 给class即Student绑定属性,这样对所有Student的instance都生效{类层次的}

    Student.name = 'I am Student' #{类属性}
    s2 = Student()
    print(s2.name,'
    ')
    #给class新增 {类方法}
    def SetScore(self,score):
        self.score = score      #这里等价于也新增了实例属性score
    Student.SetScore = SetScore #直接把刚外部定义的方法传给Student
    s3 = Student()
    s3.SetScore(101)
    s2.SetScore(102)
    s1.SetScore(103)
    print(s3.score, '
    ')
    print(s2.score, '
    ')
    print(s1.score, '
    ')
    

    3. 限制当前类{但是无法管辖其子类}的所有instance的“新增属性”

    class Animal(object):
        __slots__ = ('name','age') #用tuple来限定Animal的所有instance的属性,但是无法
                                   #无法限制Animal的子类的instance的属性
    a1 = Animal()
    a2 = Animal()
    a3 = Animal()
    a1.name = 'a1'
    a2.age = 123
    #a3.gender = 'female' #会报错:没有这样的attribution
    #但是Animal的子类却不受限制
    class Dog(Animal):
        pass
    d = Dog()
    d.gender = 'male'   #这是Animal限制之外的属性
    print(d.gender,'
    ') #完全OK
  • 相关阅读:
    Mysql 一主两从架构转换成级联复制
    redis安装配置
    SQL语句中----删除表数据drop、truncate和delete的用法
    编译安装apache2.4.28错误
    zabbix3.2.5编译安装部署
    Keepalived 高可用集群实践
    sersync+rsync实时同步备份部署
    LINE学习
    DeepWalk学习
    csv文件的读取
  • 原文地址:https://www.cnblogs.com/LS1314/p/8504463.html
Copyright © 2020-2023  润新知