首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我试图将它们传递给另一个类时,它们就会消失。

当我试图将它们传递给另一个类时,它们就会消失。
EN

Stack Overflow用户
提问于 2021-05-28 18:02:37
回答 1查看 39关注 0票数 0

我正试图建立一个生产工厂的虚拟模型。为此,我创建了以下结构:

首先,必须有一个部件文件,该文件显示所有已处理的部件。对于每个部件,都有一个生产周期的各个阶段的列表,这些阶段发生在不同的机器或同一类型的instruments

  • Every机器中,它们被分组在生产工厂的车间中,因此,还将有一个车间文件,其中包含关于车间运行状态的信息--

  • --我的第一个目标是对各个部件文件进行排序并创建。新的部件对象只包含在同一个车间中发生的阶段。然后,我希望将每个按相同车间阶段排序的部件对象分配给相应的车间object

  • Finally,,我希望通过查看每个部件阶段中的一个名为‘phase’

的信息来设置每个车间对象的自动化级别。

我的问题是,我创建的用相应部分填充每个车间的set_part方法似乎不起作用。

我在这里和那里放置了一些print语句,以检查发生了什么,并且似乎在加载器类中正确地创建了对象,但是它们没有从那里离开。

这是代码:

代码语言:javascript
运行
复制
class Phase:

def __init__(self, seq, workshop, placings):

    self.seq = seq
    self.workshop = workshop
    self.placings = placings

class Part:

def __init__(self, name, phases, workshop):

    self.name = name
    self.phases = phases
    self.workshop = workshop

class Workshop:

    def __init__(self, name, shifts, shift_dur):

        self.name = name
        self.shifts = shifts
        self.shift_dur = shift_dur

        self.parts = []
        self.automation = []

        print('parts inside workshop ', self.name, ':', self.parts)

        #this should assign the level of automation to the workshop
        automation = []
        for part in self.parts:
            for phase in part.phases:
                if phase.placings > 0:
                    automation.append('auto')
                else:
                    automation.append('manual')
        self.automation = automation

    def set_part(self, part):
        self.parts.append(part)

类装载机:

代码语言:javascript
运行
复制
def __init__(self, cycles_file, workshops_file):

    self.cycles_file = cycles_file
    self.workshops_file = workshops_file
    self.workshops = []

    # those are some nested cycles that I use to create part objects with the same workshops
    parts = []
    for sheet in self.cycles_file:
        name = sheet
        phases = []
        workshops_set = set()
        for phase in self.cycles_file[sheet]:
            seq = phase['seq']
            workshop = phase['workshop']
            placings = phase['placings']
            workshops_set.add(workshop)
            phase = Phase(seq, workshop, placings)
            phases.append(phase)
        for workshop in workshops_set:
            same_workshops_phases = []
            for phase in phases:
                if workshop == phase.workshop:
                    same_workshops_phases.append(phase)
            part = Part(name, same_workshops_phases, workshop)
            parts.append(part)

    # creates workshop obj
    for workshop in self.workshops_file:
        name = workshop
        shifts = self.workshops_file[workshop]['Shifts']
        shift_dur = self.workshops_file[workshop]['Shift duration']
        workshop = Workshop(name, shifts, shift_dur)
        self.workshops.append(workshop)

    # setting parts for workshops
    for part in parts:
        for workshop in self.workshops:
            if workshop.name == part.workshop:
                workshop.set_part(part)


    for workshop in self.workshops:
        print('workshop: ', workshop.name)
        print('level of automation: ', workshop.automation)
        print('parts processed by workshop:')
        for part in workshop.parts:
            print(part.name)
            print('with phases:')
            for phase in part.phases:
                print(phase.seq)

类Loader的第一行中有一个缩进错误,但这只是一个复制/粘贴问题。然后我创建对象:

代码语言:javascript
运行
复制
cycles_file =  {'p1': [{'seq': 10, 'workshop': 'ws1', 'placings': 2},
                   {'seq': 20, 'workshop': 'ws2', 'placings': 0}],
            'p2': [{'seq': 10, 'workshop': 'ws3', 'placings': 0}],
            'p3': [{'seq': 10, 'workshop': 'ws2', 'placings': 0},
                   {'seq': 20, 'workshop': 'ws1', 'placings': 3},
                   {'seq': 30, 'workshop': 'ws3', 'placings': 0}]}

workshops_file =    {'ws1': {'Shifts': 3, 'Shift duration': 8},
                 'ws2': {'Shifts': 2, 'Shift duration': 7.5},
                 'ws3': {'Shifts': 2, 'Shift duration': 7.5}}

loader = Loader(cycles_file, workshops_file)

我得到的结果是:

车间内的零件ws1:[]

车间内的零件ws2:[]

车间内的零件ws3:[]

研讨会: ws1

自动化水平:[]

车间加工的零件:

相位为10的p1

相位为20的p3

研讨会: ws2

自动化水平:[]

车间加工的零件:

相位为20的p1

相位为10的p3

研讨会: ws3

自动化水平:[]

车间加工的零件:

相位为10的p2

相位为30的p3

正如你所看到的,车间内部的零件是空的,所以自动化水平不能设置.

有人能帮我吗?我是一个自学成才的人,我真的感到迷茫!

EN

回答 1

Stack Overflow用户

发布于 2021-05-28 18:18:51

你的代码很好,打印是误导你。

在课堂上,请注意:

代码语言:javascript
运行
复制
class Workshop:
    def __init__(self, name, shifts, shift_dur):
        self.parts = []
        self.automation = []

        print('parts inside workshop ', self.name, ':', self.parts)

在运行set_part方法之前,您要在车间中打印部件。

正如我在前面提到的,您的代码很好,车间中的部分并不是空的,只需用以下方法进行测试:

代码语言:javascript
运行
复制
for workshop in loader.workshops:
    print('parts inside workshop ', workshop.name, ':', workshop.parts)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67743655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档