我正在尝试使用Child类调用并使用Parent的__init__method,除了在Child中使用super()方法之外,还有哪些其他方法可以执行此操作?我被告知要避免使用super(),因此我想知道。
# -*- coding: utf-8 -*-
class Room(object):
def __init__(self, current_room):
self.current_room = current_room
print("You are now in Room #{}".format(self.current_room))
class EmptyStartRoom(Room):
def __init__(self, current_room=1):
super().__init__(current_room)
class ChestRoomKey1(Room):
def __init__(self, current_room=2):
super().__init__(current_room)
a_room = EmptyStartRoom()
other_room = ChestRoomKey1()
从上面的代码我得到:
你现在在1号房间
你现在在2号房间
答案 0 :(得分:0)
您还可以在传递self
参数的同时直接调用基类:
# -*- coding: utf-8 -*-
class Room(object):
def __init__(self, current_room):
self.current_room = current_room
print("You are now in Room #{}".format(self.current_room))
class EmptyStartRoom(Room):
def __init__(self, current_room=1):
Room.__init__(self, current_room)
class ChestRoomKey1(Room):
def __init__(self, current_room=2):
Room.__init__(self, current_room)
a_room = EmptyStartRoom()
other_room = ChestRoomKey1()
您还应该查看this帖子,告诉您为什么 应该1>}在开始进行多重继承时考虑使用super()
,但就目前而言,两种方式都很好
答案 1 :(得分:0)
不要试图寻找其他选择。
它们可能是可能的,但您最终会硬编码超类(请参阅@abccd答案)或使用"您自己的MRO解决方案"。但是从长远来看,避免super()
会变成维护噩梦(现在实施更难)
在你的情况下,你正在做正确的事!这个例子有点奇怪,因为__init__
方法之间的唯一区别是参数的默认值,但我想这只是为了说明问题,对吧?