在下面的两个类中,Guitarist_1和Guitarist_2,其中一个对象表示函数的字符串格式最为pythonic;公认?我更喜欢Guitarist_1,因为我不需要列出;以任何特定方式订购物业。
[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 :(得分: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')>