我正在嘗試解決這個問題,在這個問題中,我被要求使用屬性方法來計算創建圓圈的次數。下面是相同的代碼。
import os
import sys
#Add Circle class implementation below
class Circle:
counter = 0
def __init__(self,radius):
self.radius = radius
Circle.counter = Circle.counter 1
def area(self):
return self.radius*self.radius*3.14
def counters():
print(Circle.counter)
no_of_circles = property(counter)
if __name__ == "__main__":
res_lst = list()
lst = list(map(lambda x: float(x.strip()), input().split(',')))
for radius in lst:
res_lst.append(Circle(radius).area())
print(str(res_lst), str(Circle.no_of_circles))
上面的代碼為該區域提供了正確的輸出,但 counter 應該是 3 而我得到的結果低于 output 。下面是 input = 1,2,3 的輸出
[3.14, 12.56, 28.26] <property object at 0x0000024AB3234D60>
我已經嘗試了一切,但沒有運氣。在代碼的主要部分,no_of_circles 被稱為 Circle.no_of_circles,這表明它將使用 python 的屬性方法。但是輸出是錯誤的。請幫我找出我哪里出錯了。
uj5u.com熱心網友回復:
str(Circle.no_of_circles)在這里,您呼叫的是類的屬性,而不是該類的實體,即 Circle 物件;以下將起作用:-
class Circle:
_counter = 0
def __init__(self,radius):
self.radius = radius
Circle._counter = 1
def area(self):
return self.radius*self.radius*3.14
@property
def no_of_circles(self):
return self._counter
if __name__ == "__main__":
lst = list(map(lambda x: float(x.strip()), input("Enter radius : ").split(',')))
cir_lst = [Circle(_) for _ in lst]
res_lst = [__.area() for __ in cir_lst]
print(res_lst, cir_lst[-1].no_of_circles)
uj5u.com熱心網友回復:
這是一個使用該property函式的簡單作業示例。注意:創建一個類的實體(一次)然后在整個代碼中使用該實體總是一個好習慣。也更好地使用self.counter而不是Cirlcle.counter. 自我是圓。
#Add Circle class implementation below
class Circle:
def __init__(self,value=0):
self._counter = value
def area(self, radius):
return radius*radius*3.14
def add_counter(self, value):
print('add counter')
self._counter = 1
def get_counter(self):
print('get counter')
return self._counter
no_of_circles = property(get_counter, add_counter)
if __name__ == "__main__":
circle = Circle()
area = []
for idx in range(5):
area.append(circle.area(idx))
circle.add_counter(1)
print("number of calls: ", circle.no_of_circles)
print('area:', area)
輸出(注意如何呼叫 get 和 add 計數器):
add counter
add counter
add counter
add counter
add counter
get counter
number of calls: 5
area: [0.0, 3.14, 12.56, 28.26, 50.24]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383912.html
標籤:蟒蛇-3.x python-装饰器
上一篇:如果輸入==串列
