我几天前开始学习python,还有许多我不知道的事情,但我正在努力 所以,我有这个:
if setting == MAKE:
rettt = User.make()
elif setting == MOD:
rettt = User.mod()
elif setting == REM:
rettt = User.rem()
您如何思考,我们可以通过以下方式改变这一点:
settings = {
'MAKE': make,
'MOD': mod,
'REM': rem
}
if setting in settings:
rettt = User.settings()
感谢您的关注。
答案 0 :(得分:0)
使用getattr
从用户对象获取属性。而且您不再需要if
:
settings = {
'MAKE': 'make',
'MOD': 'mod',
'REM': 'rem'
}
rettt = getattr(User, settings[setting])()
请注意,字典值应该是字符串,因为这些方法与User
对象绑定,您无法像无界函数一样调用它们。
显然,你可以不用字典:
rettt = getattr(User, setting.lower())()
答案 1 :(得分:0)
您有三种选择:
存储方法名称,然后使用getattr()
将名称重新转换为对方法的引用:
settings = {
'MAKE': 'make',
'MOD': 'mod',
'REM': 'rem'
}
if setting in settings:
rettt = getattr(User, settings[setting])()
我注意到,在这一点上,这变成了一个简单的小套管练习,也许是通过一套测试来确保你不能调用任意方法:
settings = {'MAKE' 'MOD', 'REM'}
if setting in settings:
rettt = getattr(User, setting.lower())()
每次都将绑定的方法存储在字典中:
settings = {
'MAKE': User.make,
'MOD': User.mod,
'REM': User.rem,
}
if setting in settings:
rettt = settings[setting]()
使用operator.methodcaller()
objects;这些采用字符串方法名称,可以使用对象调用 on :
from operator import methodcaller
settings = {
'MAKE': methodcaller('make'),
'MOD': methodcaller('mod'),
'REM': methodcaller('rem')
}
if setting in settings:
rettt = settings[setting](User)