1
Из 2-х классов ниже, Guitarist_1 и Guitarist_2, который представляет собой строковый формат функции представления объектов, наиболее pythonic; принято? Я предпочитаю Guitarist_1, потому что мне не нужно перечислять; заказывайте свойства любым способом.Python String Format args vs 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')
В случае Guitarist_2 вы могли бы назвать 'format' с распакованным списком (что делает его примерно таким же, как Guitarist_1) , Строка формата предназначена для заказа материала. – kren470
Этот вопрос может найти лучший дом на http://codereview.stackexchange.com/ – SethMMorton
FYI: 'className' может быть упрощен, чтобы' return self .__ class __.__ name__'. (Кроме того, '__init__' в производных классах не нужны, если все, что они делают, передают свои аргументы в '__init__' суперкласса.) – jwodder