1

在下面的 2 个类中,Guitarist_1 和 Guitarist_2,其中一个对象表示函数的字符串格式是最 Pythonic 的;公认?我更喜欢 Guitarist_1,因为我不必一一列举;以任何特定方式对属性进行排序。

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

吉他手.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')
4

1 回答 1

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')>
于 2013-11-03T00:35:21.347 回答