Python - 了解__repr__

时间:2013-11-30 22:09:54

标签: python refactoring

我在我的类中定义了一个main函数,以及一个使用方法def __str__(self):返回对象属性的方法。因为我在类中调用__repr__,这是调用此函数的正确方法吗?另外,还有一个更好的选择,必须使用if,elif和else的长链吗?

代码:

def main(self):
    """Create usability of the account. Accessing the account
    should enable the user to check the account balance, make
    a deposit, and make a withdrawal."""
    main_menu = {1: 'Balance', 2: 'Deposit', 3: 'Withdraw', 4: 'Exit'}
    using_account = True

    while using_account:
        print '\nAvailable Choices:'
        print '\n'.join('%d.) %s' % (i, choice) for i, choice in
                        main_menu.iteritems())
        my_choice = int(raw_input('Enter a choice: '))
        if my_choice == 1:
            self.current_balance()
        elif my_choice == 2:
            self.deposit_funds()
        elif my_choice == 3:
            self.withdraw_funds()
        elif my_choice == 4:
            print self.__repr__()
            using_account = False
        else:
            print 'Invalid choice, try again!'

3 个答案:

答案 0 :(得分:2)

调用some_object.__repr__()时调用

repr(some_object)(无论是显式还是隐式)。直接调用它很好,但大多数人会改为编写repr(self)

对于if语句链,它不是很麻烦要担心多少;-)另一种选择:

int2meth = {1: "current_balance", 2: "deposit_funds",
            3: "withdraw_funds", 4: "__repr__"}

您可以将该dict存储在任何位置(模块级别,类级别......)。

然后

methname = int2meth.get(my_choice)
if methname is None:
    print 'Invalid choice, try again!'
else:
    getattr(self, methname)()

当然,类似的事情可以通过列表而不是字典来完成。 dict提供了另一种可能性:使用字符串作为键而不是无意义的小整数。

答案 1 :(得分:0)

... elif my_choice == 4:      print self .__ repr __() ...

如果您这样做会发生什么:     打印(个体经营)

答案 2 :(得分:0)

与所有__magic__方法一样,__repr__应该通过运算符或类似运算符的内置函数调用 - 在这种情况下,repr()℅r格式说明符。