在python中创建和调用类属性

Creating and calling class property in python

本问题已经有最佳答案,请猛点这里访问。

我正在尝试以下程序,出现以下错误:

类型错误:set_a()缺少1个必需的位置参数:"value"

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A:
    def __init__(self):
        pass
    @property
    def a(self,value):
        return value

    @property
    def set_a(self, value):
        self.a(value)

    def call_req(self,value):
        return self.set_a(value)

aobj = A()
aobj.call_req(5)

尝试了这里给出的解决方案,但没有成功。

有人能解释我为什么会出错,或者这是我尝试的完全错误吗?


@property是返回值的东西。您从不调用@property,调用是作为属性访问它的隐式调用。self.set_a试图调用set_a返回一个值,然后用后面的括号调用该值。所以在你认为你正在进行的调用之前有一个隐式调用,它缺少参数。您可能想这样声明属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A:
    def __init__(self):
        self._foo = 42

    @property
    def a(self):
        return self._foo

    @a.setter
    def a(self, value):
        self._foo = value

obj = A()
obj.a = 5