Python的插槽不能用于特定的类声明

2024-10-01 17:38:55 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在python中声明类如下时隙工作

class CSStudent(object):
stream = 'cse'
__slots__ = ['name', 'roll']

def __init__(self, name, roll):
    self.name = name
    self.roll = roll

当我在python中声明类如下时隙不起作用

^{pr2}$

Tags: nameself声明streamobjectinitdefclass
2条回答

两件事似乎引发了你的错误:

首先,class声明中缺少的括号。在

第二,你的缩进太过分了。每个新代码块有四个空格。在

class CSStudent(object):
    stream = 'cse'
    __slots__ = ['name', 'roll']

    def __init__(self, name, roll):
        self.name = name
        self.roll = roll 

user247=CSStudent('user247',2018)

print user247.name,' | ',user247.roll

运行此程序时,运行正常:

^{pr2}$

__slots__属性只在“new-style”类中工作(这些类并不是真正的“new”,它们早在15年前就出现在python2.2中)。在Python2中,只有从object(或其他一些新样式类)继承时,才能获得一个新样式的类。继承是通过将一个或多个基类放在class语句中派生类名称后的括号中来声明的。因此,CSStudent的第二个实现不是一个新样式的类,因为它不继承任何东西。因此__slots__将不起作用(它只是一个奇怪的命名属性)。在

新样式和旧样式类之间的区别只存在于Python2上。Python3已经删除了旧样式的类,因此您的两个类实现在Python3解释器中的工作原理相同(不再需要显式地从object继承)。在

相关问题 更多 >

    热门问题