当我在python中声明类 slots work
时where
当我在python中声明该类时,插槽不起作用
class CSStudent(object):
stream = 'cse'
__slots__ = ['name', 'roll']
def __init__(self, name, roll):
self.name = name
self.roll = roll
答案 0 :(得分:1)
似乎有两件事触发了你的错误:
首先,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
答案 1 :(得分:1)
__slots__
属性仅适用于" new-style"课程(不是真的"新",它们在15年前的Python 2.2中出现)。在Python 2中,如果从object
(或从其他一些新式类继承)继承,则只能获得新式类。通过在class
语句中的派生类的名称后面的括号中放置一个或多个基类来声明继承。因此,CSStudent
的第二个实现不是新式类,因为它不会从任何东西继承。因此__slots__
不会起作用(它只是一个奇怪的命名属性)。
新风格和旧风格类之间的区别仅存在于Python 2中.Python 3已经删除了旧式类,因此两个类实现在Python 3解释器中的工作方式相同(它是' s不再需要明确继承object
)。