Python字符串格式参数与kwargs

Python字符串格式参数与kwargs,python,string,class,format,arguments,Python,String,Class,Format,Arguments,在下面的两个类中,Guitarist_1和Guitarist_2,哪一个对象表示函数的字符串格式最像Python;认可的?我更喜欢吉他手1的,因为我不必列出;以任何特定方式对属性进行排序 [Guitarist_1] Hendrix, Jimi (11/27/1942) [Guitarist_2] Hendrix, Jimi (11/27/1942) 吉他手 import re class Guitarist(object): CLASS_NAME_RE = r'([A-Z][\w\d

在下面的两个类中,Guitarist_1和Guitarist_2,哪一个对象表示函数的字符串格式最像Python;认可的?我更喜欢吉他手1的,因为我不必列出;以任何特定方式对属性进行排序

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

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')

如果订单不重要,则简化且多功能的版本应为:

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'))
class吉他手(对象):
定义初始(自我,**kwargs):
自我记录更新(kwargs)
定义报告(自我):
返回“”。格式(自身类名称),
“,”.join(self.\u dict.\u.values())
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
印刷品(吉他手(fname='Jimi',lname='Hendrix',dob='11/27/1942'))



对于Guitarist_2,您可以使用未打包列表调用
格式
(这与Guitarist_1大致相同)。那么,格式字符串是用来订购物品的。这个问题可能会在仅供参考的网站上找到更好的答案:
className
可以简化为
return self.\uuuuu class\uuuu name.\uuuuu
。(此外,如果派生类中的
\uuuuu init\uuuu
只是将其参数传递给超类的
\uuuu init\uuu
,则它们是不必要的)
<Guitarist('Jimi', 'Hendrix', '11/27/1942')>