Python OOP中的奇怪(对我来说)错误

2024-05-29 03:02:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个新手,我有一个非常奇怪的问题(就像在标题中,对我来说)。 代码如下:

    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'

提前感谢您的帮助!你知道吗


Tags: inselfinitdefclassshufflecreas1
3条回答

你没有正确初始化你的类。尝试这样做:

m = Mazzo()
m.Crea()

这么快解释一下原因。首先,第一行初始化类型为Mazzo的对象,并将其设置为m(请注意,对于所有方法、初始化或其他方法,您都需要使用“()”)。你知道吗

接下来我们要调用Crea函数,我们通过调用刚刚创建的对象而不是类本身来实现。你知道吗

您正在将类型指定给M,而不是创建新对象。可能你想这样做:

m=Mazzo()
m.Crea()

问题在于如何实例化类Mazzo

>>>M=Mazo

真正分配给M的是类对象,而不是Mazzo对象:

>>>type(M)
<class 'type'>

你的下一行问题更大:

>>> Mazzo.Crea(M)

它要求Mazzo类以Mazzo类对象作为参数执行Crea方法。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

祝你好运。你知道吗

相关问题 更多 >

    热门问题