如何使用 @属性 装饰器为 class 的属性赋值?

How to assign values to the properties of the class using the @property decorator?

如何使用@property decorator给class的属性赋值? 我的代码如下。我想计算 s1.result 的长度,同时给 s1.result 赋值。我必须编写代码才能使 s1.result 变为 None。我该如何修改代码:

import numpy as np


class MyClass:
    def __init__(self):
        pass

    @property
    def result(self):
        pass

    @result.setter
    def result(self, value):
        self.len_of_result = len(value)


if __name__ == '__main__':
    s1 = MyClass()
    s1.result = np.arange(100)
    print(f's1.result:{s1.result}')
    print(f's1.len_of_result:{s1.len_of_result}')

结果是:

s1.result:None
s1.len_of_result:100

我期望的结果是:

s1.result:[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
 96 97 98 99]
s1.len_of_result:100

我找到了另一种方法:

import numpy as np


class MyClass:
    def __init__(self):
        self.result = []

    @property
    def len_of_result(self):
        return self.result.__len__()


if __name__ == '__main__':
    s1 = MyClass()
    print(f's1.len_of_result:{s1.len_of_result}')
    s1.result = np.arange(100)
    print(f's1.result:{s1.result}')
    print(f's1.len_of_result:{s1.len_of_result}')

s1.len_of_result:0
s1.result:[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
 96 97 98 99]
s1.len_of_result:100

下面是你想要的吗?

import numpy as np

class MyClass:
    def __init__(self):
        self._result = None

    @property
    def result(self):
        return self._result

    @result.setter
    def result(self, value):
        self._result = value
        self.len_of_result = len(value)


if __name__ == '__main__':
    s1 = MyClass()
    s1.result = np.arange(100)
    print(f's1.result:{s1.result}')
    print(f's1.len_of_result:{s1.len_of_result}')