Reputation: 672
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
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