Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Don';t使用getattr函数在动态调用中传递或忽略参数_Python_Python 3.x - Fatal编程技术网

Python Don';t使用getattr函数在动态调用中传递或忽略参数

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

我已经在我的应用程序中创建了一个过滤器生成器,我想改进它,删除不必要的参数Value=我的函数没有一个流行的和未响应的,比如像javascript一样工作。 querystring参数可以是:none(所有记录)、popular=1、unanswered=1、by=username

过滤器.py

views.py

说清楚一点,我正在寻找一种优雅的方法来避免逻辑测试,因为我是Python的初学者,可以用php等其他语言来完成

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