2010-12-19 5 views
2

私は、CPU使用量、ディスク使用量、Mem使用量などの情報を生成するクラスを設計しています。 3台のシステムの場合、多くのワークステーションとワークステーションを持つデータセンターには多くのPCがあります。したがって、CPU使用率と他のパラメータは、3つのレベル(Datacenters、Workstations、Pcs)すべてに必要です。正しい下のクラスのデザインであるか、それはPythonでクラスを設計する

EDIT

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コードでもありません。 –

+2

それはすべて悪いコードです。あなたがPythonを使用しようとする前に、Pythonの基本的な紹介を読む必要があるようです。 –

+0

私はちょうど例を挙げてくれました。 – Rajeev

答えて

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 
+0

元のクラス名は意味をなさないが、複数であってはならない –

+0

@PawełPrażak:これも真実で、私は更新します。 WSはまた冗談な名前です。 :) –

+0

ありがとうこれは説明のためのelpful +1だった – Rajeev

2

これも何を意味して設計する方法を提案してください?

class WS(Datacentres): 
     name 
     location 
     cpu 
     mem 

とにかくデザインの音が間違っています。データセンターにワークステーションがある場合、なぜワークステーションがデータセンターから暴走するのでしょうか?ワークステーションはデータセンターではありません。 PcsWSないとWSDatacentresないので

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

+1

そしてhttp://en.wikipedia.org/wiki/Is-aあなたがそれをしている間に: – user470379

+0

しかし、私の要点は、それが属するデータセンターの参照を持つ必要があるということです。 – Rajeev

+4

@Rajeevあなたが思っていることを明示的に記述するか、あるいはあなたが思っていることを示す有効なPythonコードを提供してください。あなたが提供したものに基づいて、あなたのデザインが何であるかはわかりません。 'class WS(Datacentres):'という行は、Datacentresを継承するWSという新しいクラスの宣言を開始するPythonコードです。それが別の方法で解釈されることを意図している場合は、どのように言わなければなりません。 – user470379

1

あなたは、そのように、ここで継承を使用しないでください。

あなたが(名前、CPU ...)クラスフィールドそのすべて持っているUnitInfoを作成し、そこにあるので、関係ここでは「持っている」(とない、DataCentresWSPcsにそのクラスのインスタンスを使用することができます「です")。

または、Unit(またはUnits、私はなぜ複数のフォームを使用するのか理解できません)というクラスを作成し、そのクラスから継承します。 Unitは「名前、 "CPU-使い方" を "持っている" というように "Pcは" UnitあるかもしれないUnitは、しかし、そのクラスのための適切な名前ではありません

3

ヒント:。。。

  • 使用4 -space indentation
  • getterの代わりにpropertiesを使用すると、すべてのパラメータに対して1つのプロパティを提供するのではなく、単一のプロパティを提供します(後でパラメータを追加するか、サブクラス化するためです)。クラス)
  • 単一のインスタンスが複数のデータセンターを表すわけではないので、「Datacenters」ではなく「Datacenter」という単数のクラス名を使用します。
  • パラメータobjを呼び出さない
  • したがって、データセンターにはCPUがありますか?そして、ワークステーションはデータセンターであり、は引数としてデータセンターを取得しますか?ワアアット?

これらの点は主にコーディングスタイルに関するものでした。私は実際にあなたのユースケースであなたを助けることはできません - あなたのクラス階層が完全にねじれているという点を得ることを望みますか?

関連する問題