您好 :> 我正在學習 python 物件編程。我做了簡單的代碼:
import random
drawn = []
class Lottery():
def __init__(self, letter, drawn):
self.letters = ['a', 'b', 'c', 'd', 'f', 'g', 'h']
self.letter = letter
self.drawn = drawn
def drawnumbers():
number = random.randint(0, 10)
return number
def drawletters(self):
letter = random.choice(self.letters)
return letter()
for i in range(0,9):
drawn.append(drawnumbers())
for i in range(0,3):
drawn.append(drawletters())
print(drawn)
這是錯誤:
Traceback (most recent call last):
File "C:/Users/pawee/PycharmProjects/pythonProject1/lottery.py", line 3, in <module>
class Lottery():
File "C:/Users/pawee/PycharmProjects/pythonProject1/lottery.py", line 19, in Lottery
drawn.append(drawletters())
TypeError: drawletters() missing 1 required positional argument: 'self'
我做錯了什么?
uj5u.com熱心網友回復:
因此,當您定義屬于類的方法時,它們都將“self”作為第一個引數。
定義類時也不包括括號,除非它是從另一個類繼承的
但是,還有幾個錯誤。
我認為這可能是格式錯誤,但最后幾行需要不縮進,因此它們不在課堂上。
如果它們應該是類的一部分,那么您將希望將它們放在自己的方法中(也包括 self 引數)。
為了使對彩票類的呼叫在沒有實體的情況下作業,它們也必須是靜態的。
所以讓它運行需要讓你的代碼看起來像這樣......
import random
drawn=[]
class Lottery: #no parenthesis
def __init__(self, letter, drawn):
self.letters = ['a', 'b', 'c', 'd', 'f', 'g', 'h']
self.letter = letter
self.drawn = drawn
@staticmethod
def drawnumbers(self): #include self
number = random.randint(0, 10)
return number
@staticmethod
def drawletters(self): #include self
letter = random.choice(self.letters)
return letter #no parenthesis
#unindent so we aren't in the class anymore
for i in range(0,9):
drawn.append(Lottery.drawnumbers())
for i in range(0,3):
drawn.append(Lottery.drawletters())
print(drawn)
#at this point, drawn is not associated with the lottery class
# to associate it, you need to make a variable out of the class
lotteryObj = Lottery("A", drawn) #it takes 2 arguments, letter and drawn
print(lotteryObj.drawn) #=> [...]
print(lotteryObj.letter) #=> "A"
然而,這并不是真正的類應該如何作業。
如果您想創建一個彩票類,最好讓該類保存它使用的資料,并擁有影響該資料的方法。
這是默認引數派上用場的地方。它們允許您為您的類定義不需要給出的引數。
這樣,您可以獲得一些抽獎號碼的串列,將其提供給您的彩票課程,然后將其添加到抽出更多號碼/字母的串列中。
import random
drawn=[]
class Lottery: #no parenthesis
def __init__(self, drawn=[]): #default for drawn, letter not needed
self.letters = ['a', 'b', 'c', 'd', 'f', 'g', 'h']
self.drawn = drawn #if you don't give the class a list, it makes an empty list
def drawnumbers(self): #include self
number = random.randint(0, 10)
#instead of returning, change the list this class has using self
self.drawn.append(number)
def drawletters(self): #include self
letter = random.choice(self.letters)
self.drawn.append(letter)
#you can add a print method or get methods for printing or getting the drawn list
#unindent so we aren't in the class anymore
lotto1 = Lottery()
lotto2 = Lottery([1]) #give it a list with something in it
for i in range(0,9):
lotto1.drawnumbers()
lotto2.drawnumbers()
for i in range(0,3):
lotto1.drawletters()
lotto2.drawletters()
print(lotto1.drawn)
print(lotto2.drawn)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/431110.html
下一篇:打字稿-在陣列中推送到達日期的值
