所以我有一个父母和子女课程:
class Map(object):
def __init__(self, name=''):
self.mapName = name
self.rules = {}
class Rule(Map):
def __init__(self, number):
Map.__init__(self)
self.number = number
def __repr__(self):
return "Map " + self.mapName + " rule number " + str(self.number)
if __name__ == "__main__":
map = Map("thismap")
rule = Rule(1)
map.rules[rule.number] = rule
以上:
$ python -i inherit.py
>>> map
<__main__.Map object at 0xb7e889ec>
>>> map.rules
{1: Map rule number 1}
>>> map.rules[1]
Map rule number 1
>>>
我尝试过添加:
map.rules[2] = Rule(2)
但仍然有:
$ python -i inherit.py
>>> map.rules
{1: Map rule number 1, 2: Map rule number 2}
>>>
和
map.rule = Rule(3)
这也没有真正让我得到我想要的东西:
>>> map.rules
{1: Map rule number 1, 2: Map rule number 2}
>>> map.rule
Map rule number 3
>>>
我要做的是将子实例链接到父类的实例并访问动态父类属性和值,在这种情况下会很方便,因为我想用列表填充地图规则并打印规则,包括每个规则的父映射名称。我只是不确定如何在python中执行此操作。或者我只是试图以一种不应该使用的方式使用继承,或者遗漏一些悲惨的东西。
欢迎任何想法,并提前致谢
答案 0 :(得分:0)
你滥用继承权。规则不需要从Map继承来访问Map的属性,并且将规则附加到Map将不会使Map看到Map的属性值作为它自己的属性值。继承地图意味着规则 是地图,而不是它与地图相关联或由地图管理。
如果您希望规则了解其地图,请让它记录与之关联的地图:
class Rule(object):
def __init__(self, number, map):
super(Rule, self).__init__()
self.number = number
self.map = map
def __str__(self):
# __str__, not __repr__, because __repr__ should be unambiguous,
# have a clear beginning and ending, and obviously indicate the type.
return "Map {} rule number {}".format(self.map.mapName, self.number)
Rule(1, map) # makes a rule associated with map
您可能希望折叠生成规则并将其添加到地图中的一个操作 - 可能是Map
的实例方法。