2013-11-02 5 views
1

아래의 2 클래스 중 Guitarist_1과 Guitarist_2는 객체 표현 함수의 문자열 형식이 가장 파이썬 적이므로; 받아 들였습니까? Guitarist_1을 선호하기 때문에 목록에 추가 할 필요가 없습니다. 특정 방식으로 특성을 정렬하십시오.파이썬 문자열 형식 args 대 kwargs

[Guitarist_1] Hendrix, Jimi (11/27/1942) 
[Guitarist_2] Hendrix, Jimi (11/27/1942) 

Guitarist.py

import re 

class Guitarist(object): 
    CLASS_NAME_RE = r'([A-Z][\w\d_]+)\'>$' 
    def __init__(self, fname, lname, dob): 
     self.fname, self.lname, self.dob = fname, lname, dob 
    def className(self): 
     return re.search(self.CLASS_NAME_RE, str(type(self))).group(1) 
    def __repr__(self): 
     return '[{}]'.format(self.className()) 

class Guitarist_1(Guitarist): 
    def __init__(self, fname, lname, dob): 
     Guitarist.__init__(self, fname, lname, dob) 
    def __repr__(self): 
     return Guitarist.__repr__(self) + ' {lname}, {fname} ({dob})'\ 
     .format(**self.__dict__) 


class Guitarist_2(Guitarist): 
    def __init__(self, fname, lname, dob): 
     Guitarist.__init__(self, fname, lname, dob) 
    def __repr__(self): 
     return Guitarist.__repr__(self) + ' {}, {} ({})'\ 
     .format(self.lname, self.fname, self.dob) 

print Guitarist_1('Jimi', 'Hendrix', '11/27/1942') 
print Guitarist_2('Jimi', 'Hendrix', '11/27/1942') 
+0

Guitarist_2의 경우 당신이 부를 수있는 'format'과 압축 해제 목록 (Guitarist_1과 거의 같음) . 형식 문자열은 물건을 주문하는 것입니다. – kren470

+2

이 질문은 http://codereview.stackexchange.com/ – SethMMorton

+1

에서 더 나은 집을 찾을 수 있습니다. FYI :'className'은'return self .__ class __.__ name__'으로 단순화 될 수 있습니다. (또한 파생 클래스의'__init__'는 슈퍼 클래스의'__init__'에 인수를 전달할 때 불필요합니다.) – jwodder

답변

2

순서가 중요하지 않은 경우 간단하고 매우 다양한 버전은 다음과 같습니다

class Guitarist(object): 

    def __init__(self, **kwargs): 
     self.__dict__.update(kwargs) 

    def __repr__(self): 
     return "<{0}('{1}')>".format(self.__class__.__name__, 
            "', '".join(self.__dict__.values())) 

if __name__ == '__main__': 
    print(Guitarist(fname='Jimi', lname='Hendrix', dob='11/27/1942')) 

<Guitarist('Jimi', 'Hendrix', '11/27/1942')> 
관련 문제