zoukankan      html  css  js  c++  java
  • python面向对象__slots__变量的运用

    大家都知道,类创建实例的时候,可以给这个实例添加属性,而__slots__的作用就是限制我们能添加哪些属性,写一个简单的例子。

    class Student(object):
      __slots__=('name','age')
    s=Student()
    s.name='MR.xu'
    s.age=22
    s.core=30

    运行结果 我们会得到一个错误:AttributeError: 'Student' object has no attribute 'score'  提示我们没有score这个属性,结果就是,name是age这两个属性被添加了,而score被拒绝

    这个时候我们再创建一个Student的子类 Student2

    class Student2(Student):
      pass 
    s2=Student2()
    s2.name='MR.lee'

    s2.score=100

    s2.age=22

    print(s2.name,s2.age,s2.score)

    运行结果为

    MR.xu 22 100

    可以看出,虽然我们继承了Student类,但是并没有继承他的__slots__变量,我们可以给Student2的实例添加任何属性,那我们再给Student2定义一个__slots__变量看看

    class Student2(Student):
      __slots__=('grade') 
    s2=Student2()

    s2.name='MR.xu'
    print(s2.name)
    s2.age=22
    print(s2.age)
    s2.score=100
    print(s2.score)
    s2.grade='大一'
    print(s2.grade)

    在这里,我们给Student2这个类中添加了__slots__变量值为grade,并给实例s2添加了grade属性

    我们来看下分别运行的结果运行结果:

    s2.name='MR.xu'
    print(s2.name)

    MR.xu

    ---------------------------------

    s2.age=22
    print(s2.age)

    22

    ---------------------------------

    s2.score=100
    print(s2.score)

    AttributeError: 'Student2' object has no attribute 'score'

    ---------------------------------

    s2.grade='大一'
    print(s2.grade)

    大一

    grade,name,age三个属性都成功添加,唯独score没有,原因就是子类如果定义了__slots__变量,那么他就允许创建自己本身(Student2)的__slots__变量和它的父类(Student)的

    __slots__变量。即子类(Student2)的实例(s2)允许创建(‘grade’,'name','age')三个属性

  • 相关阅读:
    MySQL如何监测是否命中索引? mysql执行计划解读
    mysql修改用户密码的方法及命令
    php7 安装rabbitmq 扩展 amqp扩展
    HAProxy的高级配置选项-Web服务器状态监测
    HAProxy 配置SSL
    nginx request_body 为空 没有参数 ;关于client_max_body_size client_body_buffer_size配置
    mysql 存储过程 函数的 导入导出
    postman设置客户端证书
    python字符串和列表之间相互转换
    python 发邮件 带附件 给多人发邮件
  • 原文地址:https://www.cnblogs.com/bidepanpan/p/7097748.html
Copyright © 2011-2022 走看看