所以我是python類的新手,我在這里有點掙扎:(。所以我想創建一個包含坐標(x,y)的類點。首先我創建了一個設定值的函式,然后是函式以列印元組中的值。但后來我想操縱 y 坐標以沿 x 軸反射。但突然它開始給我一個 AttributeError
輸入:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def print(self):
i = (self.x, self.y)
print(tuple(i))
def reflect_x(self):
self.y*=-1
p1 = Point(1,4)
p1.print()
p2 = Point(-3,5)
p2.print()
p3 = Point(-3,-5)
p3.reflect_x().print()
輸出:
(1, 4)
(-3, 5)
Traceback (most recent call last):
File "/I'd/love/to/keep/this/private/Oef.py", line 22, in <module>
p3.reflect_x().print()
AttributeError: 'NoneType' object has no attribute 'print'
只要我不實作我的 reflect_x 函式,您就可以看到,我不會收到錯誤訊息。
我的愿望輸出:
(1, -4)
(-3, -5)
(-3, 5)
提前謝謝你<3
uj5u.com熱心網友回復:
正如已經指出的那樣,reflect_x() 回傳默認值(無),因為您沒有在那里放置任何回傳值。如果你習慣了支持鏈接方法的編程語言,你應該添加return self你想要使用的函式。
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def print(self):
i = (self.x, self.y)
print(tuple(i))
return self # change here
def reflect_x(self):
self.y*=-1
return self # change here
p1 = Point(1,4)
p1.print()
p2 = Point(-3,5)
p2.print()
p3 = Point(-3,-5)
p3.reflect_x().print()
因此允許您的方法可鏈接。關于它的一個很好的視頻。
uj5u.com熱心網友回復:
似乎您正在嘗試p3在呼叫后列印 Object的狀態reflect_x,對嗎?
為此,我建議p3.print()像以前一樣在最后一行下方使用。你不能這樣呼叫print,因為它試圖找到它作為reflect_x回傳的函式,它是None,而不是你的類。
uj5u.com熱心網友回復:
將其直接應用于物件:
p3 = Point(-3,-5)
p3.reflect_x()
p3.print()
與 reflect_x() 的結果相反,它不回傳任何內容。
uj5u.com熱心網友回復:
是的,這很簡單。當您呼叫 時p3.reflect_x().print(),這意味著您print()從p3.reflect_x()物件呼叫函式。但這p3.reflect_x()意味著物件從物件的reflect_x()功能回傳p3。在這里它是 None 因為你沒有從你的代碼中回傳任何東西。因此,您只需在函式
中添加 return 即可。reflect_x()它看起來像這樣:
def reflect_x(self):
self.y*=-1
return self
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/519553.html
標籤:Python功能班级
上一篇:JavaScript嵌套數字加法器函式,具有未知數量的鏈式函式呼叫
下一篇:在Python中查找和替換字符
