柚子快报邀请码778899分享:Python概念-禁锢术之

http://www.51969.com/

之所以给它起名为禁锢术,并非空缺来风,下面我们来了解一下__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': , '__module__': '__main__', 'x': , '__slots__': ['x', 'y']}

16 #依然可以看到x的存在,所以,实例化对象不可以删除__slots__定义的属性

代码示例:(类示例)

class Foo:

__slots__ = ["x","y"]

Foo.__slots__ = "z"

print(Foo.__dict__)

#{'__doc__': None, 'x': , '__slots__': 'z', '__module__': '__main__', 'y': }

del Foo.x

print(Foo.__dict__)

#{'__doc__': None, '__slots__': 'z', '__module__': '__main__', 'y': }

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

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

 

柚子快报邀请码778899分享:Python概念-禁锢术之

http://www.51969.com/

查看原文