这是the Python docs。我不明白这一点,有人会举一些例子吗?
如果一个类定义了一个也在基类中定义的槽,那么该实例 由基类槽定义的变量是不可访问的(除了 直接从基类检索其描述符)。这呈现 程序的含义未定义。将来,可能会进行检查 添加以防止这种情况。
我试图做一个这样的例子,但失败了。当我运行下面的程序时,它会打印1
,因此变量不可访问。什么时候会?
class Base(object):
__slots__ = 'a'
def __init__(self):
self.a = 1
class Subclass(Base):
__slots__ = 'a'
def __init__(self):
super(Subclass, self).__init__()
print self.a
Subclass()
答案 0 :(得分:2)
当我运行下面的程序时,它打印1,因此变量不可访问。
这里实际上有两个 a
个实例变量。 Base
定义的那个不能通过属性访问访问;对于Subclass
类型的对象,对self.a
的所有访问(包括Base.__init__
内的访问)都会转到Subclass
定义的实例变量。
如果手动检索Base.a
描述符,则可以访问Base
定义的插槽:
>>> x = Subclass()
1
>>> Base.a.__get__(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: a
>>> Base.a.__set__(x, 2)
>>> Base.a.__get__(x)
2
>>> Subclass.a.__get__(x)
1
正如您所看到的,Base.a
和Subclass.a
是独立的,尽管名称相同。