jaried
jaried

Reputation: 672

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

How to assign values to the properties of the class using the @property decorator? My code is as follows. I want to calculate the length of s1.result while assigning a value to s1.result. I have to code to get s1.result to be None. How should I modify the code:

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}')

The result is:

s1.result:None
s1.len_of_result:100

The result I expect is:

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

I found another way:

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

Upvotes: 1

Views: 103

Answers (1)

NNN
NNN

Reputation: 593

Is the following what you want?

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}')

Upvotes: 1

Related Questions