zoukankan      html  css  js  c++  java
  • Python之__slots__

    一、前言

            最近学习廖雪峰官网的python,学习后,简单总结下

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

    class Student(object):
            pass
    #这是给实例绑定属性
    >>s=Student()
    >>s.name="Balllyh"
    >>print(s.name)
    Ballyh
    #这是给实例绑定方法
    def set_age(self,age):
        self.age=age
    from types import MethodType
    s.set_age=MethodType(set_age,s)#第一个参数是方法,第二个参数是实例,给实例S绑定set_age方法
    s.set_age(25)#调用实例方法
    s.age#测试结果=25

    s2=Student()#创建新实例s2
    s2.set_age(26)#尝试调用新方法--》报错,这个实例未绑定set_age方法。

     给class绑定方法后,所有实例均可调用

    def set_score(self,score):
            self.score=score
    
    >>Student.set_score=set_score
    >>s=Student()
    >>s2=Student()
    >>s.set_score(199)
    199
    >>s2.set_score(89)
    89

     二、使用__slots__

        (1)使用__slots__可以限制实例的属性,举例,只给Student类添加name和age属性。

         

        由于__slots__未绑定score属性,所以直接调用会报错

    (2)__slots__绑定的属性只对当前类有用,对继承子类无作用。

            只有继承子类用__slots__自己绑定属性后,它允许的属性=自身__slots__绑定属性+父类绑定的属性

         

        

  • 相关阅读:
    Android Studio使用教程
    http://www.android-doc.com/#/295
    JDK,JRE,JVM区别与联系(ZZ)
    eclipse下载
    mac下android环境搭建笔记(android studio)
    android环境配置
    JDK、JRE、JVM三者间的关系
    实体类作用、封装与面向对象思想
    领域模型中的实体类分为四种类型:VO、DTO、DO、PO
    [架构设计] 组件和模块的区别
  • 原文地址:https://www.cnblogs.com/balllyh/p/13347133.html
Copyright © 2011-2022 走看看