使用其他类函数的python类

使用其他类函数的python类,python,Python,嘿,我想对其进行编程,使输送机的a.ctie()功能同时运行输送机所在区域的活动(),然后该区域运行其所在plc的活动() 我该怎么做?您需要两件事:1)每个传送带对象需要存储对区域对象的引用,每个区域对象需要存储对plc对象的引用。2) transfer.actie只需在其存储的区域引用上调用该方法,同样地,对于区域及其plc,也需要调用该方法 一种方法是更新传递给plc的每个区域,以及传递给区域的每个输送机 class plc: def __init__(self,name,zone

嘿,我想对其进行编程,使输送机的a.ctie()功能同时运行输送机所在区域的活动(),然后该区域运行其所在plc的活动()

我该怎么做?

您需要两件事:1)每个
传送带
对象需要存储对
区域
对象的引用,每个
区域
对象需要存储对
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)