Python中的__SLOTS__属性使用示例

697次阅读  |  发布于5年以前

看python社区大妈组织的内容里边有一篇讲python内存优化的,用到了slots。然后查了一下,总结一下。感觉非常有用

python类在进行实例化的时候,会有一个dict属性,里边有可用的实例属性名和值。声明slots后,实例就只会含有slots里有的属性名。


    # coding: utf-8


    class A(object):
      x = 1

      def __init__(self):
        self.y = 2

    a = A()
    print a.__dict__
    print(a.x, a.y)
    a.x = 10
    a.y = 10
    print(a.x, a.y)


    class B(object):
      __slots__ = ('x', 'y')
      x = 1
      z = 2

      def __init__(self):
        self.y = 3
        # self.m = 5 # 这个是不成功的


    b = B()
    # print(b.__dict__)
    print(b.x, b.z, b.y)
    # b.x = 10
    # b.z = 10
    b.y = 10
    print(b.y)


    class C(object):
      __slots__ = ('x', 'z')
      x = 1

      def __setattr__(self, name, val):
        if name in C.__slots__:
          object.__setattr__(self, name, val)

      def __getattr__(self, name):
        return "Value of %s" % name


    c = C()
    print(c.__dict__)
    print(c.x)
    print(c.y)
    # c.x = 10
    c.z = 10
    c.y = 10
    print(c.z, c.y)
    c.z = 100
    print(c.z)

    {'y': 2}
    (1, 2)
    (10, 10)
    (1, 2, 3)
    10
    Value of __dict__
    1
    Value of y
    (10, 'Value of y')
    100 

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8