我是Python的初学者,我正在寻找一种方法来创建一个带有子属性的类,这样我就可以将公共属性组合在一起并引用主类。例如:
class RoadNetwork(object): # This is the main class
def __init__(self):
self.Types = ['Dirt', 'Gravel', 'Pavement']
class HighWay(self): # This is the subclass
def __init__(self):
MaxSpeed = 55
MinSpeed = 35
Type = self.Types[2]
>>> roads = RoadNetwork()
>>> roads.Types
['Dirt', 'Gravel', 'Pavement']
>>> roads.HighWay.MaxSpeed
55
>>> roads.HighWay.MinSpeed
35
>>> roads.HighWay.Type
'Pavement'
>>>
答案 0 :(得分:1)
你遗产错了。这就是你应该如何声明一个类层次结构:
class RoadNetwork(object): # This is the main class
def __init__(self):
self.types = ['Dirt', 'Gravel', 'Pavement']
class HighWay(RoadNetwork): # This is the subclass
def __init__(self):
RoadNetwork.__init__(self)
self.maxSpeed = 55
self.minSpeed = 35
self.roadType = self.types[2]
例如:
road = RoadNetwork()
road.types
=> ['Dirt', 'Gravel', 'Pavement']
highway = HighWay()
highway.maxSpeed
=> 55
highway.minSpeed
=> 35
highway.roadType
=> 'Pavement'
答案 1 :(得分:0)
我并不认为继承是你正在寻找的,因为HighWay是一种道路,但它不是一种RoadNetwork。据我了解,您只需要RoadNetwork
的单个实例,并且您的道路类型都会引用同一个RoadNetwork
实例。
我还建议将一些实例变量移动到类属性中。例如,HighWay
的所有实例都具有相同的roadType
,因此它们不会在实例级别分配,而是共享类值。
执行此操作的最简单方法可能是让所有道路类型引用全局变量roads
,但通常会以这种方式使用全局变量。更好的解决方案是使用类工厂,将引用传递给RoadNetwork
实例:
def highway_factory(roads):
class HighWay(object):
max_speed = 55
min_speed = 35
road_type = roads.types[2]
return HighWay
class RoadNetwork(object):
def __init__(self):
self.types = ['Dirt', 'Gravel', 'Pavement']
self.HighWay = highway_factory(self)
示例:
>>> roads = RoadNetwork()
>>> roads.types
['Dirt', 'Gravel', 'Pavement']
>>> roads.HighWay.max_speed
55
>>> roads.HighWay.min_speed
35
>>> roads.HighWay.road_type
'Pavement'