我在我的类中定义了一个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!'
答案 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
格式说明符。