【问题标题】:Is this the correct approach to build 'super structure' classes in Python?这是在 Python 中构建“超级结构”类的正确方法吗?
【发布时间】:2017-05-04 14:04:21
【问题描述】:

我正在尝试构建一个可用于实例化新工作项目的类。这个想法是每个项目都将调用来自不同部门的资源,如果需要,我需要能够在 Project 对象中实施。每个 Department 都应该能够访问项目级别的属性和方法,以及能够访问各个部门属性的项目对象(即,对部门成本求和以返回总体项目成本)。

以下是我正在尝试做的一些伪代码,希望能提供有关正确方法的任何指导:

定义项目

class Project:
    totalCost=0

    def addDepartment(Dept):
        totalCost+=name.DepartmentCost
        Departments=append(Dept)

定义部门

class Department1:
    def __init__(self,Name, NumStaff, AverageStaffSalary)
    Name=None
    NumStaff=None
    AverageStaffSalary=None
    DepartmentCost=AverageStaffSalary*NumStaff
    Department1_SpecificParm=1


class DepartmentN:
    def __init__(self,Name, NumStaff, AverageStaffSalary)
    Name=None
    NumStaff=None
    AverageStaffSalary=None
    DepartmentCost=AverageStaffSalary*NumStaff
    DepartmentN_SpecificParm="A"

在其中实例化项目和嵌套部门

p1=Project("myProject")
p1.addDepartment(Department1(Name="myFirstDepartment", NumStaff=9, AverageStaffSalary=1000))
print p1.myFirstDepartment.DepartmentCost        #Print 9000

p1.addDepartment(DepartmentN(Name="myNthDepartment", NumStaff=2, AverageStaffSalary=6000))
print p1.myNthDepartment.DepartmentCost        #Print 12000

返回所有部门的总成本

p1.TotalCost          #Print 21000  

【问题讨论】:

  • 这闻起来像家庭作业,太宽泛,而且您提供的代码没有意义,并且是无效的 Python(“原样”)。关注某个方面,或者在提问之前改进结构。恕我直言
  • 不幸的是,Markus 没有完成作业……只是想对我需要如何构建它有一个切实的感觉。我通常使用 PHP,因为这是一个很小的任务,所以我想我会尝试使用 Python……如果有人能指出我正确的方向,我保证将来会用非伪代码回来(!)
  • 您的代码没有多大意义(即使对于伪代码),但我认为这可能符合您正在寻找的内容。 Repl.it playground
  • @Olian04 - 谢谢! :-) 非常友善
  • @Bendy 好吧。您提供的 sn-p 是正确的,只是 ppl 从未真正保存在部门实例中。但是p.deps[1].cost 会起作用。 (注意:请记住,python 是 0 索引的,也就是访问列表中的第一个元素 = list[0]

标签: python oop


【解决方案1】:

(在 cmets 中提供发布答案)

您的代码没有多大意义(即使对于伪代码),但我认为这可能与您正在寻找的内容一致。 Repl.it playground

class Project:
  total = 0
  deps = []

  def addDep(self, dep):
    self.total += dep.cost
    self.deps.append(dep)

class Department:
  def __init__(self, ppl, salary):
    self.cost = ppl * salary

p = Project()
p.addDep(Department(10, 200))
p.addDep(Department(1, 3000))

print(p.total)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 2020-05-06
    • 2011-07-17
    • 1970-01-01
    • 2021-09-20
    • 2021-12-28
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多