我是新手,我有一个非常奇怪的问题(比如标题,对我来说)问题。 这是代码:
from random import shuffle
class Carta:
listaSemi=[" ","Bastoni","Spade","Coppe","Denari"]
listaValori=[" ","Asso","Due","Tre","Quattro",
"Cinque","Sei","Sette","Otto","Nove","Dieci"]
def __init__(self,seme,valore):
self.seme=seme
self.valore=valore
def __str__(self):
s1=self.listaValori[self.valore]
s2=self.listaSemi[self.seme]
return " ".join((s1,"di",s2))
class Mazzo:
def __init__(self):
self.Carte=[]
def Crea(self):
for seme in range(1,5):
for valore in range(1,11):
self.Carte.append(Carta(seme, valore))
def Mescola(self):
shuffle(self.Carte)
当我这样做时:
M=Mazzo
Mazzo.Crea(M)
我明白了:
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
Mazzo.Crea(M)
File "/home/administrator/Scrivania/Script/Carte.py", line 19, in Crea
self.Carte.append(Carta(seme, valore))
AttributeError: type object 'Mazzo' has no attribute 'Carte'
提前感谢您的帮助!
答案 0 :(得分:3)
您正在错误地宣传您的课程。试着这样做:
m = Mazzo()
m.Crea()
快速解释原因。首先,第一行初始化类型Mazzo
的对象并设置为m(请注意&#39;()&#39;您需要为所有方法,初始化或其他方法。)只有周长为self
,它可以留空。
接下来我们要调用Crea函数,我们通过调用刚创建的对象而不是类本身来完成。
答案 1 :(得分:2)
您正在为M分配类型,而不是创建新对象。可能你想这样做:
m=Mazzo()
m.Crea()
答案 2 :(得分:2)
问题在于如何实例化 Mazzo
类>>>M=Mazo
真正分配给 M 的是类对象,而不是Mazzo对象:
>>>type(M)
<class 'type'>
你的下一行更有问题:
>>> Mazzo.Crea(M)
要求Mazzo类执行Crea方法,并使用Mazzo类对象作为参数。而Crea不会接受任何其他参数,更不用说类对象了。我怀疑你可能还有更多关于python中 self 方法参数的阅读。
实例化给定类的新对象的常用方法如下:
>>> class MyClass(object):
def __init__(self,someValue):
self.someValue = someValue
def aMethod(self)
print(self.someValue)
>>> newObject = MyClass(42)
>>> newObject.aMethod()
42
祝你好运。
答案 3 :(得分:0)
当你做了
>>
你所做的是M=Mazzo
Mazzo.Crea(M)
。
首先,Mazzo.Crea(Mazzo)
应为M=Mazzo
。当您只调用M=Mazzo()
时,它不会触发Mazzo
,尽管__init__
会这样做。
仅供参考:调用Mazzo.Crea(Mazzo)会引发TypeError,如
Mazzo()