论坛首页 编程语言技术论坛

关于类中slots属性的用法的疑问

浏览 5486 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-02-28  
__slots__保存着实例变量的列表,并且在实例中保留空间以确定它们在实例中。一旦使用了__slots__,其它的实例变量就不能被赋值了。

文档中是这么说的:
引用

This class variable can be assigned a string, iterable, or sequence of strings with variable names used by instances. If defined in a new-style class, __slots__ reserves space for the declared variables and prevents the automatic creation of __dict__ and __weakref__ for each instance


也就是说
class C(object):
    __slots__='b'
    def __init__(self):
        self.b=67
c=C()
c.e=9 #这里就会报异常


我有个问题,请看下面的代码
class B(object):
    a=23
class C(B):
    __slots__='b'
    def __init__(self):
        self.b=67
c=C()
c.e=9


上面的代码就不会报异常,想问一下这是什么原因?
   发表时间:2007-02-28  
我想是B中有__dict__,因为它没有使用__slots__,所以C把B中的__dict__给继承下来了。
0 请登录后投票
   发表时间:2007-02-28  
limodou 写道
我想是B中有__dict__,因为它没有使用__slots__,所以C把B中的__dict__给继承下来了。


谢谢你了,应该就是你说的这样了,代码这样写就会抛异常了

class B(object):
  __slots__='a'   
    a=23   
class C(B):   
    __slots__='b'   
    def __init__(self):   
        self.b=67   
c=C()   
c.e=9   
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics