使用其他类函数的python类
嘿,我想对其进行编程,使输送机的a.ctie()功能同时运行输送机所在区域的活动(),然后该区域运行其所在plc的活动() 我该怎么做?您需要两件事:1)每个使用其他类函数的python类,python,Python,嘿,我想对其进行编程,使输送机的a.ctie()功能同时运行输送机所在区域的活动(),然后该区域运行其所在plc的活动() 我该怎么做?您需要两件事:1)每个传送带对象需要存储对区域对象的引用,每个区域对象需要存储对plc对象的引用。2) transfer.actie只需在其存储的区域引用上调用该方法,同样地,对于区域及其plc,也需要调用该方法 一种方法是更新传递给plc的每个区域,以及传递给区域的每个输送机 class plc: def __init__(self,name,zone
传送带
对象需要存储对区域
对象的引用,每个区域
对象需要存储对plc
对象的引用。2) transfer.actie
只需在其存储的区域
引用上调用该方法,同样地,对于区域
及其plc
,也需要调用该方法
一种方法是更新传递给plc的每个区域,以及传递给区域的每个输送机
class plc:
def __init__(self,name,zones):
self.list_zones=[]
self.name= name
for zone in zones:
self.list_zones.append(zone)
def actie(self):
print self.name
class zone:
def __init__(self,name,conveyors):
self.list_conveyors=[]
self.naam = name
for conveyor in conveyors:
self.list_conveyors.append(conveyor)
def actie(self):
print self.name
class conveyor:
def __init__(self,name):
self.naam = name
def actie(self):
print self.name
if __name__ == '__main__':
list_conveyors_zone_1= []
list_conveyors_zone_1.append(conveyor(1))
list_conveyors_zone_1.append(conveyor(2))
list_conveyors_zone_1.append(conveyor(3))
list_conveyors_zone_2 = []
list_conveyors_zone_2.append(conveyor(4))
list_conveyors_zone_2.append(conveyor(5))
list_zone_plc_1 = []
list_zone_plc_1.append(zone(10,list_conveyors_zone_1))
list_zone_plc_1.append(zone(20,list_conveyors_zone_2))
plc_1 = plc(1,list_zone_plc_1)
plc_1.list_zones[1].list_conveyors[1].actie()
上面采用的方法是容器负责将自身添加到包含的对象中。另一种方法是将容器传递给每个包含对象的\uuuu init\uuu
方法,并使其自身更新
不管引用是如何放置的,只需使用包含对象的方法从调用容器的
actie
方法即可。如果要编写一个包含\uuuu init\uuuu
和一个其他函数的类,该类几乎总是不是类,应该作为数据或普通函数编写
class Plc:
def __init__(self, name, zones):
self.list_zones = list(zones)
self.name = name
for zone in zones:
zone.plc = self
def actie(self):
print self.name
class Zone:
def __init__(self, name, conveyors):
self.list_conveyors = list(conveyors)
self.naam = name
for c in conveyors:
c.zone = self
def actie(self):
print self.name
if hasattr(self, 'plc'):
self.plc.actie()
class Conveyor:
def __init__(self,name):
self.naam = name
def actie(self):
print self.name
if hasattr(self, 'zone'):
self.zone.actie()
这使您可以非常轻松地引用内容。如果我想知道1区第三台输送机的名称:
conveyors = dict()
conveyors.['zone1'] = [1, 2, 3, 4]
conveyors.['zone2'] = [5,6]
conveyors.['plc1'] = [10, 20]
如果我需要获得所有传送带的名称,则:
conveyors['zone1'][2]
没有类,代码可读性更高,并且不需要太多中间值。甚至使用更具描述性的名称(如“皮带”)也能帮助读者
来自Java背景的人习惯于强制所有东西都成为一个类,因为Java需要它。如果你像Java一样编写Python,那就不好了。PyCon 2012有一个很好的视频演示,名为
for zone in conveyors:
for belt in conveyors[zone]:
print(belt)