python的__slots__

看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

上一篇:
下一篇:

相关文章:

Categories: 博客记录

0 Responses so far.

Leave a Reply