我在這里找到了一個解決方案,但后來我意識到它是 Python 2.7。我正在使用 Python 3.3.7,并且我最近一直在嘗試使用類,我相信我最終可能會讓自己感到困惑。我有兩個檔案;我的類檔案(Dice.py):
class Dice:
def __init__(self, sides):
self.sides = sides
@classmethod
def roll(self):
return self.sides 2
和我的主檔案。
from Dice import Dice
Dice(int(input('How many sides are on the dice? ')))
print(Dice.roll())
現在很簡單,理論上。但是,我遇到了一個奇怪的屬性錯誤,這讓我在這十行左右的代碼上停留的時間比我愿意承認的要長得多。每次我嘗試運行主檔案時,我都會收到“AttributeError:type object 'Dice' has no attribute 'sides'”,理論上這應該給我一個輸入量 2 的答案。
我已經通過多種方式對其進行了初始化,添加了@classmethod,重命名了屬性等等;我只是無法擺脫這個錯誤。我想知道如果錯誤在開始時沒有參考 init 函式究竟意味著什么,以及如何修復它以便它可以實際運行。謝謝!
uj5u.com熱心網友回復:
撰寫類方法更慣用的方法是
class Dice:
...
@classmethod
def roll(cls):
...
注意引數通常被稱為cls,而不是self。該@classmethod方法的作用是使當您呼叫 時Dice.roll(),傳遞給該方法的“實體”是物件Dice-字面意思是擁有該方法的類(不是該類的任何特定實體)。這通常與繼承和多型性結合使用。
現在,由于__init__()從未在Dice類本身上呼叫過(它只會在類的實體上呼叫Dice),因此Dice該類永遠不會sides附加一個名為的屬性。
在您的情況下,您可能希望roll()成為實體方法,并將新實體保存到變數中:
class Dice:
def __init__(self, sides):
self.sides = sides
def roll(self):
return self.sides 2
die = Dice(int(input('How many sides are on the dice? ')))
print(die.roll())
# alternatively
sides = int(input('How many sides are on the dice? '))
print(Dice(sides).roll())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/452233.html
標籤:Python python-3.x 班级
上一篇:使用javascript類中的requestAnimationFrame在螢屏上移動html元素
下一篇:具有多個引數的C 類模板
