我正在设计一个类,它可以生成cpu使用,磁盘使用,内存使用等信息...... 对于3个系统,假设有许多工作站和工作站的数据中心有许多PC。因此,所有3个级别(数据中心,工作站,Pcs)都需要CPU使用率和其他参数。请建议以下类设计正确或如何设计
修改
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 :(得分:3)
一些建议:
object
(新样式类)这些要点主要是关于编码风格。我无法真正帮助您处理您的用例 - 希望您明白您的类层次结构是完全错误的?!
答案 1 :(得分: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()
行没有做任何事情。
当然,正如其他人所指出的,数据中心什么时候有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
答案 2 :(得分:2)
这甚至意味着什么?
class WS(Datacentres):
name
location
cpu
mem
无论如何,你的设计听起来都不对。如果数据中心有工作站,为什么工作站会从数据中心进入?工作站不是数据中心。
答案 3 :(得分:1)
您不应该以这种方式使用继承,因为Pcs
不是WS
且WS
不是Datacentres
。
您可以创建一个包含所有字段(name,cpu ...)的类UnitInfo
,并在DataCentres
,WS
,{{1}中使用该类的实例因为这里有“有”关系(而不是“是”)。
或者,创建一个名为Pcs
(或Unit
的类,我不明白为什么使用复数形式),并继承该类。 Units
“有”“名称,”cpu-usage“等等。”Pc“是Unit
。但是Unit
可能不是该类的适当名称。