Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 3.x 如何使用@property setters并让mypy开心?_Python 3.x_Python Decorators_Mypy - Fatal编程技术网

Python 3.x 如何使用@property setters并让mypy开心?

Python 3.x 如何使用@property setters并让mypy开心?,python-3.x,python-decorators,mypy,Python 3.x,Python Decorators,Mypy,我有以下example.py文件: class Location(object): def __init__(self, latitude, longitude): self.latitude = latitude self.longitude = longitude @property def latitude(self): return self._latitude @property def lon

我有以下
example.py
文件:

class Location(object):
    def __init__(self, latitude, longitude):
        self.latitude = latitude
        self.longitude = longitude

    @property
    def latitude(self):
        return self._latitude

    @property
    def longitude(self):
        return self._longitude

    @latitude.setter
    def latitude(self, latitude):
        """Setter for latiutde."""
        if not (-90 <= latitude <= 90):
            raise ValueError('latitude was {}, but has to be in [-90, 90]'
                             .format(latitude))
        self._latitude = latitude

    @longitude.setter
    def longitude(self, longitude):
        """Setter for longitude."""
        if not (-180 <= longitude <= 180):
            raise ValueError('longitude was {}, but has to be in [-180, 180]'
                             .format(longitude))
        self._longitude = longitude

    def __repr__(self):
        return 'Location({}, {})'.format(self.latitude, self.longitude)

    __str__ = __repr__


munich = Location(48.137222222222, 11.57555)
print(munich)
try:
    munich.latitude = 200
    print("This should not work")
except ValueError:
    pass

为什么我会得到这些,如何修复它们?

这个问题可能与

以下代码错误地引发错误:

class Config(object):

    @property
    def my_proprty(self):
        return None

    def _other(self):
        pass

    @my_proprty.setter
    def my_proprty(self, val):
        pass Error:
MyPy关闭该问题并将其标记为假阳性。目前看来,他们还没有打算解决这个问题

我们目前还没有解决这个问题的计划,但我们很乐意这样做 接受公关-朱卡尔

将getter和setter彼此相邻移动(首先使用getter)应该可以解决这个问题


将其视为一项功能:)

Mypy可能不喜欢传递与方法同名的参数:
def longitude(self,longitude):
。问题是:-)是的。我不知道有什么逻辑,也不知道他们为什么不修复它,但我想这是一个功能:)。你想把它作为一个答案发布,还是我应该创建一个社区wiki答案?:-)
class Config(object):

    @property
    def my_proprty(self):
        return None

    def _other(self):
        pass

    @my_proprty.setter
    def my_proprty(self, val):
        pass Error:
mypytest.py: note: In class "Config": mypytest.py:12: error:
Callable[[Any], Any] has no attribute "setter"