我有一个嵌套的类结构,当我实例化顶级类时,它将其他类的一些对象实例化为属性,并将那些其他类实例化为他们自己的属性。如何覆盖python中的类定义?
正如我发展我的代码,我想重写一个新的模块定义一个类(这将是对我来说,以避免破坏现有的功能在其他脚本中同时增加新功能的好方法)。
作为玩具例如,存在如下情况:我定义两个类,其中一个的另一,甲板和卡的列表的模块。当我实例化一个Deck对象时,它实例化一个Card对象列表。
module_1.py
class Card(object):
def __init__(self, suit, number):
self.suit = suit
self.number = number
class Deck(object):
def __init__(self):
suit_list = ['heart', 'diamond', 'club', 'spade']
self.cards = []
for suit in suit_list:
for number in range(14):
self.cards.append(Card(suit, number))
我有另一种类型的卡,我想创建它们的甲板,于是我进口甲板到一个新的模块和新模块中定义一个新的卡类,但是当我实例露天平台,它已经从module_1.py卡
module_2.py
from module_1 import Deck
class Card(object):
def __init__(self, suit, number):
self.suit = suit
self.number = number
self.index = [suit, number]
if __name__ == '__main__':
new_deck = Deck()
print new_deck.cards[0]
输出:
>python module_2.py
<module_1.Card object at 0x000001>
是否有某种方式,我可以用我的甲板类从module_1.py但它用我的新卡班?
传递类的定义是麻烦,因为实际情况是深层嵌套的,我可能还希望开发包含顶级对象中的其它类。
此外,我预计这是符合面向对象的范例。是吗?
这是如何回答“具体问题”比帕特里克的答案或我删除的答案更?我想如果你认为OP不想修改'Deck'的代码。 – Cyphase
@Cyphase好了,问题是“我怎样才能重写python中的类定义?”。这是你如何做到的。 – cdonts
确实,这将覆盖Card类定义而不是修改Deck类,但是您应该提及它会使原始Card定义无法访问... –