2010-12-19 60 views
2

我正在设计一个类,它可以生成cpu使用情况,磁盘使用情况,Mem使用情况等信息...... 3个系统的数据中心,可以说有多个工作站和工作站的数据中心有很多个PC因此所有3个级别(数据中心,工作站,个人计算机)都需要CPU使用率和其他参数。请建议是以下级的设计正确,或者它是如何被设计在python中设计类

编辑

class Datacenters: 
def __init__(self,name,location,cpu,mem): 
    self.name=name 
    self.location=location 
    self.cpu=cpu 
    self.mem=mem 

def getparam(self): 
    return self.name,self.location ,self.cpu,self.mem 

def getname(self): 
    return self.name 

class WS(Datacenters): 
def __init__(self,name,location,cpu,mem,obj): 
    #datacentername = Datacenters.__init__(self) #To which data center it is associated 
    obj.getname() #To which data center it is associated 

    self.name=name 
    self.location=location 
    self.cpu=cpu 
    self.mem=mem 

def getparam(self,obj): 
    return self.name,self.location ,self.cpu,self.mem,obj.getname() 

def getpcname(self): 
    return self.name 

class Pcs(WS): 
def __init__(self,name,location,cpu,mem,obj): 
    obj.getpcname() #To which WS it is associated 
    self.name=name 
    self.location=location 
    self.cpu=cpu 
    self.mem=mem 

def getparam(self,obj): 
    return self.name,self.location ,self.cpu,self.mem,obj.getpcname() 


a = Datacenters("dc1","Bl1",20,30) 
print a.getparam() 
b = WS("WS1","Bl1",20,30,a) 
print b.getparam(a) 
c = Pcs("PC1","Bl1",20,30,b) 
print c.getparam(b) 
+0

-1:示例甚至没有有效的Python代码。 – 2010-12-19 08:33:07

+2

这都是不好的代码。看起来你应该在尝试使用它之前阅读一些Python的基本介绍。 – 2010-12-19 08:40:28

+0

我刚刚举了一个例子来吧.. – Rajeev 2010-12-19 08:42:10

回答

3

你的许多代码是毫无意义的。我删除了不需要的行:

class Datacenter: 
    def __init__(self,name,location,cpu,mem): 
     self.name=name 
     self.location=location 
     self.cpu=cpu 
     self.mem=mem 

class Workstation: 
    def __init__(self,name,location,cpu,mem,datacenter): 
     self.name=name 
     self.location=location 
     self.cpu=cpu 
     self.mem=mem 
     self.datacenter=datacenter 

class Computer: 
    def __init__(self,name,location,cpu,mem,workstation): 
     # This line does nothing: 
     self.name=name 
     self.location=location 
     self.cpu=cpu 
     self.mem=mem 
     self.workstation=workstation 

您不需要在Python中编写存取器方法。只需直接访问属性。 另外,行obj.getname()什么都没做。

当然,正如其他人指出的那样,Datacenter何时拥有CPU?并且计算机没有与工作站相同的位置?然后它不需要该位置。可能你的代码应该是这样的:

class Datacenter: 
    def __init__(self,name,location): 
     self.name=name 
     self.location=location 

class Workstation: 
    def __init__(self,name,location,datacenter): 
     self.name=name 
     self.location=location 
     self.datacenter=datacenter 

class Computer: 
    def __init__(self,name,cpu,mem,workstation): 
     # This line does nothing: 
     self.name=name 
     self.cpu=cpu 
     self.mem=mem 
     self.workstation=workstation 

    def location(self): 
     return self.workstation.location 

    def datacenter(self): 
     return self.workstation.datacenter 
+0

原始类名称没有意义,他们不应该是复数 – 2010-12-19 18:27:38

+0

@PawełPrażak:这也是如此,我会更新。 WS也是一个糟糕的名字。 :) – 2010-12-19 18:51:32

+0

感谢这是易介绍+1的解释 – Rajeev 2010-12-20 05:21:10

2

是什么意思,甚至?

class WS(Datacentres): 
     name 
     location 
     cpu 
     mem 

无论如何,你的设计听起来不对。如果一个Datacenter有工作站,为什么工作站会从数据中心进入?工作站不是数据中心。

http://en.wikipedia.org/wiki/Has-a

+1

而http://en.wikipedia.org/wiki/Is-a当你在它:) – user470379 2010-12-19 08:29:23

+0

但我的观点是,WS需要有一个参考它属于哪个数据中心 – Rajeev 2010-12-19 08:31:33

+4

@Rajeev然后你需要用英文明确地描述你在想什么,或者提供有效的Python代码来显示你在想什么。根据您提供的内容,我们无法确定您的设计是什么。 'class WS(Datacentres)'这一行是Python代码,用于开始声明从Datacentres继承的名为WS的新类。如果它的意思是以另一种方式解释,我们需要被告知如何。 – user470379 2010-12-19 08:39:13

1

你不应该以这种方式在这里使用继承,因为PcsWSWSDatacentres

可以使类UnitInfo它有所有的字段(姓名,CPU等)和使用类的实例在DataCentresWSPcs,因为有“有”关系,这里(而不是“是“)。

或者,制作一个名为Unit(或Units,我不明白你为什么使用复数形式),并继承该类。 Unit“有”“的名字,‘CPU使用率’等‘PC’是一个Unit也许Unit不是该类合适的名字虽然

3

一些建议。

  • 使用4 - 空格缩进
  • 使用properties代替获取器,提供单一属性,而不是所有参数都是单一属性(因为参数可能稍后添加或通过子类化添加)为了使用属性,从object(新样式类)
  • 使用单数类名“数据中心”而不是“数据中心”,因为单个实例不代表多个数据中心,对吧?
  • 不要调用参数“obj”
  • 那么,一个数据中心有一个CPU?而工作站是数据中心,获取数据中心作为参数? Whaaat?

这些观点主要是关于编码风格。我无法真正帮助你处理你的用例 - 希望你明白你的类层次结构完全被搞砸了吗?!