我试图以这种方式使用super()作为一个简单的类层次结构:
class Employee(object):
def __init__(self, name):
self.name = name
class FullTime(Employee):
def __init__(self, name, satOff, freeDays=[], alDays=[], programDays=[]):
global satsOffDict
global dayDict
super(Employee, self).__init__(name)
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
TypeError: object.__init__() takes no parameters
Run Code Online (Sandbox Code Playgroud)
我已经读过你需要创建父对象类型对象(新样式类)才能让super工作.如果我将类Employee(对象)更改为类Employee(),我会收到此错误:
TypeError: must be type, not classobj
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
您使用当前类super():
super(FullTime, self).__init__(name)
Run Code Online (Sandbox Code Playgroud)
super()查找相对于第一个参数的请求方法; 你开始搜索Employee,寻找父类; object.__init__()是在这种情况下匹配的下一个父方法.
您需要使用当前类,因为Python需要在Method Resolution Order中搜索基类; 该排序取决于当前类是如何从它的基类派生的(特别是如果有多个继承或基类最终被多次引用).
在Python 3.x上,您可以在super()不使用任何参数的情况下使用,并且编译器将为您的方法添加额外的提示,以便它可以确定要从哪个开始的正确类.
| 归档时间: |
|
| 查看次数: |
530 次 |
| 最近记录: |