当我在python中声明类时,就像下面的插槽工作一样
class CSStudent(object):
stream = 'cse'
__slots__ = ['name', 'roll']
def __init__(self, name, roll):
self.name = name
self.roll = roll
当我在python中声明类时,下面的插槽不起作用
class CSStudent:
stream = 'cse'
__slots__ = ['name', 'roll']
def __init__(self, name, roll):
self.name = name
self.roll = roll
__slots__
属性仅适用于“新式”类(它们不是真正的“新”类,它们在15年前的Python 2.2中出现)。在Python 2中,如果从object
(或其他一些新式类)继承,则只能获得一个新式类。通过在class
语句中的派生类名称后面的括号中放置一个或多个基类来声明继承。因此,CSStudent
的第二个实现不是新式类,因为它不会从任何东西继承。因此__slots__
将无法工作(它只是一个奇怪的命名属性)。
新样式和旧样式类之间的区别仅存在于Python 2上.Python 3已经删除了旧式类,因此两个类实现在Python 3解释器中的工作方式相同(不再需要显式继承) object
)。
似乎有两件事触发了你的错误:
首先,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
当你运行它,工作得很好:
$ chmod +x /tmp/slots_test.py
$ /tmp/slots_test.py
user247 | 2018