我一直在嘗試撰寫一個代碼,該代碼假設使用面向物件編程從實體變數的給定值回傳完美的平方。下面是我寫的,但我仍然無法得到完美的正方形。下面是我寫的
# Write a class, PerfectSquares, that implements an iterator<br>
# This will return 1, 4, 9, 25, 36, 49, etc.
class PerfectSquares:
def __init__(self, x):
self.x = x
def get_values(self):
return self.x**2
values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in values:
getter = values.get_values(i)
print(getter)
uj5u.com熱心網友回復:
您應該同時實作__iter__和__next__方法。
python中的迭代器物件符合迭代器協議,這基本上意味著它們提供了兩種方法:__iter__和__next__。
在ITER回傳迭代器物件,并在回圈開始時隱式呼叫。
的下一個()方法回傳的下一個值,并在每個回圈增量是隱式呼叫。當沒有更多值要回傳時,此方法會引發 StopIteration 例外,回圈構造隱式捕獲該例外以停止迭代。
一個很好的迭代器資源:https : //www.ibm.com/developerworks/library/l-pycon/
class PerfectSquares:
"""Class to implement an iterator
of perfect squares"""
def __init__(self, k):
self.k = k
self.n = 0
def __iter__(self):
return self
def __next__(self):
self.n = 1
if self.n <= self.k:
result = self.n ** 2
return result
else:
raise StopIteration
v = PerfectSquares(10)
for i in v:
print(i)
這將輸出:
1
4
9
16
25
36
49
64
81
100
uj5u.com熱心網友回復:
首先,您必須創建類的物件并傳遞值。(obj = PerfectSquares(i))
其次,使用該 obj 呼叫 get_values 方法而不傳遞任何引數,因為 get_values 不接受任何引數。
第三,列印變數。
請參考以下代碼:
class PerfectSquares:
def __init__(self, x): # this constructor takes an argument 'x'.
self.x = x
def get_values(self): # this function takes no argument.
return self.x**2
values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in values:
obj = PerfectSquares(i) # 'i' variable is passed to 'x' in class.
getter = obj.get_values() # returns the square of 'i' ('x' in class).
print(getter)
輸出:
1
4
9
16
25
36
49
64
81
100
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/361160.html
