Python Don';t使用getattr函数在动态调用中传递或忽略参数
我已经在我的应用程序中创建了一个过滤器生成器,我想改进它,删除不必要的参数Value=我的函数没有一个流行的和未响应的,比如像javascript一样工作。 querystring参数可以是:none(所有记录)、popular=1、unanswered=1、by=username 过滤器.py views.py 说清楚一点,我正在寻找一种优雅的方法来避免逻辑测试,因为我是Python的初学者,可以用php等其他语言来完成Python Don';t使用getattr函数在动态调用中传递或忽略参数,python,python-3.x,Python,Python 3.x,我已经在我的应用程序中创建了一个过滤器生成器,我想改进它,删除不必要的参数Value=我的函数没有一个流行的和未响应的,比如像javascript一样工作。 querystring参数可以是:none(所有记录)、popular=1、unanswered=1、by=username 过滤器.py views.py 说清楚一点,我正在寻找一种优雅的方法来避免逻辑测试,因为我是Python的初学者,可以用php等其他语言来完成 if value == "1": return getattr
if value == "1":
return getattr(self, key)
return getattr(self, key)(value)
我找到的最佳解决方案是检查参数的数量
class Filters:
queryset = None
def apply(self, queryset):
self.queryset = queryset
for key, value in self.request.items():
if key in self.filters and hasattr(self, key):
count_param = eval('self.%s.__code__.co_argcount' % key)
if count_param < 2:
return getattr(self, key)
return getattr(self, key)(value)
return self.queryset
类过滤器:
queryset=None
def应用(自身、查询集):
self.queryset=queryset
对于键,self.request.items()中的值:
如果输入self.filters和hasattr(self,key):
count\u param=eval('self.%s.\u代码\u.co\u argcount'%key〕)
如果计数参数<2:
返回getattr(self,key)
返回getattr(self,key)(值)
返回self.queryset
我想我不明白这个问题。如果您不希望popular
和unresponsed
方法具有value=None
参数,那么只需从函数的参数列表中删除value=None
取1个位置参数,但2个可能被赋予了一些逻辑来测试方法在调用getattr函数之前是否有参数这些value
参数不是不必要的,因为apply
中的代码使用参数调用这些方法:返回getattr(self,key)(value)
。你不能在不破坏代码的情况下删除它们。我在寻找一种优雅的if value==“1”替代方法:return getattr(self,key)return getattr(self,key)(value)用*args替换value=None
?
if value == "1":
return getattr(self, key)
return getattr(self, key)(value)
class Filters:
queryset = None
def apply(self, queryset):
self.queryset = queryset
for key, value in self.request.items():
if key in self.filters and hasattr(self, key):
count_param = eval('self.%s.__code__.co_argcount' % key)
if count_param < 2:
return getattr(self, key)
return getattr(self, key)(value)
return self.queryset