2013-03-03 2 views
1

필자가 작성중인 Python 게임에서 두 클래스가있다. ShipType 및 Ship. Ship 객체는 고유 한 이름, 나이, 재고 등이있는 특정 우주선을 나타냅니다. ShipType 객체는 선박의 '선'을 나타냅니다 (Mazda Protege는 자동차의 '선') 해당 유형의 선박에 대한 통계, Kelley Bluebook In 우주 가격 등Python 3에서 속성을 복사하는 좀 더 우아한 방법

모든 Ship-s가 ShipType에서 파생되어야하므로 Ship을위한 생성자는 ShipType을 인수로 사용합니다. 즉, 생성자는 다음과 같습니다 : 당신이 볼 수 있듯이,이 생성자에서 무슨 일이 일어나고 있는지의 대부분은 단지 자체에 전달 된 개체에서 동일 이름의 속성을 복사하는

... 
def __init__(self,theshiptype): 
    if not isinstance(theshiptype,ShipType): 
     raise TypeError 
    self.name=theshiptype.name 
    self.inventory=Inventory(theshiptype.invslots) 
    self.maxhp=theshiptype.maxhp 
    self.thrust=theshiptype.thrust 
    self.ftlspeed=theshiptype.ftlspeed 
    ... 

. 내가 궁금해하는 건, 이것을 할 수있는 더 짧은 방법이 있을까?

선박에 있어서는 안되는 ShipType에 몇 가지 속성이 있다는 사실에 주목할 가치가 있습니다.

답변

5

이처럼 할 수있는 :

attrsToCopy = ['name', 'inventory', 'maxhp', 'thrust', 'ftlspeed'] 
for attr in attrsToCopy: 
    setattr(self, attr, getattr(theshiptype, attr)) 

getattrsetattr 함수를 사용하면/세트 이름이 문자열에 저장된 속성을 얻을 수 있습니다. 따라서 복사 할 속성 이름 목록을 지정한 다음 목록을 반복하여 복사 할 수 있습니다.

관련 문제