2010-12-19 3 views
2

나는 CPU 사용량, 디스크 사용량, Mem 사용량 등과 같은 정보를 생성하는 클래스를 설계 중입니다. 많은 시스템과 워크 스테이션을 가진 데이터 센터에 많은 PC가 있다고 가정하면 3 시스템 용 따라서 CPU 사용량 및 기타 매개 변수는 3 가지 수준 (데이터 센터, 워크 스테이션, PC) 모두에 필요합니다. 제안 아래 클래스의 디자인은 정확 또는파이썬에서 클래스 디자인하기

편집

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 : 예는 유효한 파이썬 코드가 아닙니다. –

+2

그것은 모두 나쁜 코드입니다. 파이썬을 사용하기 전에 파이썬에 대한 기본적인 소개를 읽어야합니다. –

+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 

파이썬에서 접근 자 메소드를 작성할 필요가 없습니다. 속성에 직접 액세스하십시오. 또한 obj.getname() 줄은 아무 것도하지 않았습니다.

여기에서 다른 사람들이 지적한대로 데이터 센터에는 언제 CPU가 있습니까? 그리고 컴퓨터는 워크 스테이션과 같은 위치에 있지 않습니까? 그런 다음 위치가 필요 없습니다. 아마도 코드는 다음과 같아야합니다.

+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

하지만 요점은 WS가 자신이 속한 데이터 센터에 대한 참조가 필요하다는 것입니다. – Rajeev

+4

@Rajeev 명시 적으로 당신이 생각하는 것을 영어로 기술하거나, 당신이 생각하는 것을 보여주는 유효한 파이썬 코드를 제공하십시오. 당신이 제공 한 것을 토대로 우리는 당신의 디자인이 무엇인지 말할 수 없습니다. 'class WS (Datacentres) :'줄은 Datacentres를 상속받은 WS라는 새로운 클래스의 선언을 시작하는 파이썬 코드입니다. 그것이 다른 방식으로 해석 되려고한다면, 우리는 어떻게 말해야합니다. – user470379

1

당신은 그런 식으로 여기에 상속을 사용하지 말아야합니다.

당신은 (이름, CPU ...) 클래스 필드 모두가 UnitInfo을하고 있기 때문에 관계 여기에 "있다"(그리고, DataCentres, WS, Pcs에 그 클래스의 인스턴스를 사용할 수 있습니다 "입니다 ").

또는 Unit (또는 Units, 내가 복수형을 사용하는 이유를 모르겠 음) 클래스를 만들고 해당 클래스에서 상속을받습니다. Unit는 "등등의 이름,"CPU-사용 "및"가 ""PC "는 Unit입니다 아마 Unit 비록 그 클래스에 대한 적절한 이름이 아닌

3

제안 :...

  • 사용 4 -space indentation
  • getter 대신 properties을 사용하면 모든 매개 변수에 하나의 속성이 아니라 단일 속성을 제공합니다 (매개 변수가 나중에 추가되거나 하위 클래스로 추가되기 때문에). 속성을 사용하려면 기본 클래스를 object (새 스타일 수업)
  • 단일 인스턴스가 여러 데이터 센터를 나타내지 않으므로 "Datacenters"대신 단일 클래스 이름 인 "Datacenter"를 사용하십시오.
  • "obj"매개 변수를 호출하지 마십시오
  • 따라서 데이터 센터에 CPU가 있습니까? 그리고 워크 스테이션은 데이터 센터 인 이고은 데이터 센터를 인수로 사용합니까? 뭐라구?

이 점은 대부분 코딩 스타일에 관한 것입니다. 유스 케이스로 도울 수는 없지만 클래스 계층 구조가 완전히 망가 졌음을 알기를 바랍니다.

관련 문제