• Python概念-禁锢术之__slots__


    之所以给它起名为禁锢术,并非空缺来风,下面我们来了解一下__slost__

    __slost__:其实就是将类中的名称锁定,实例化对象,只可以赋值和调用,不可以删除名字和增加新的名字

    代码示例:(实例化对象示例)

     1 # 编辑者:闫龙
     2 class Foo:
     3     __slots__ = ["x","y"]#在类中定义属性x和y
     4 f = Foo()#实例化Foo
     5 f.x = 1#此时我们可以使用实例化对象调用类中的属性x
     6 f.y = 2
     7 #如果现在,我们在实例化对象中增加一个z
     8 f.z = 3
     9 #会得到如下错误
    10 #AttributeError: 'Foo' object has no attribute 'z'
    11 #也就是不可以,对实例化对象增加新的属性
    12 #如果现在,我们在实例化对象中删除一个x
    13 del f.x#此时程序执行并不会出错,但是我们打印一下Foo的命名空间
    14 print(Foo.__dict__)
    15 #{'__doc__': None, 'y': <member 'y' of 'Foo' objects>, '__module__': '__main__', 'x': <member 'x' of 'Foo' objects>, '__slots__': ['x', 'y']}
    16 #依然可以看到x的存在,所以,实例化对象不可以删除__slots__定义的属性

    代码示例:(类示例)

    class Foo:
        __slots__ = ["x","y"]
    Foo.__slots__ = "z"
    print(Foo.__dict__)
    #{'__doc__': None, 'x': <member 'x' of 'Foo' objects>, '__slots__': 'z', '__module__': '__main__', 'y': <member 'y' of 'Foo' objects>}
    del Foo.x
    print(Foo.__dict__)
    #{'__doc__': None, '__slots__': 'z', '__module__': '__main__', 'y': <member 'y' of 'Foo' objects>}

    综合以上内容,我们得到结论:

    __slots__只是针对实例化对象的禁锢,直接对类中的属性进行修改,是可以的

  • 相关阅读:
    android ContentObserver
    3 个简单、优秀的 Linux 网络监视器
    使用 sar 和 kSar 来发现 Linux 性能瓶颈
    4 个拥有绝佳命令行界面的终端程序
    4 个用于构建优秀的命令行用户界面的 Python 库
    理解 Linux 的平均负载和性能监控
    安装matplotlib
    面向系统管理员的网络管理指南
    使用 Nmon 监控 Linux 的系统性能
    linux smem 查看各进程使用memory情况
  • 原文地址:https://www.cnblogs.com/DragonFire/p/6763005.html
Copyright © 2020-2023  润新知