Python 自定义模块-对象没有属性

Python 自定义模块-对象没有属性,python,object,module,Python,Object,Module,我正在尝试使用自己的模块,但我遇到了这个错误,似乎不知道如何修复它: Traceback (most recent call last): File "/Users/aaron/Desktop/cg/war.py", line 4, in <module> AttributeError: Deck instance has no attribute 'test' 来自“deck.py”: 运行“war.py”时,test2()工作并打印“hello”。 d.test()不起作用

我正在尝试使用自己的模块,但我遇到了这个错误,似乎不知道如何修复它:

Traceback (most recent call last):
  File "/Users/aaron/Desktop/cg/war.py", line 4, in <module>
AttributeError: Deck instance has no attribute 'test'
来自“deck.py”:

运行“war.py”时,
test2()
工作并打印“hello”。
d.test()
不起作用,并给出上述错误。我怎样才能解决这个问题


从长远来看,我希望在其他的“纸牌游戏类”中使用Deck类,所以我不需要经常重写它。我想简单地导入Deck并使用它,所以如果我做得不正确,请让我知道

未找到Deck类,因为它不在您当前的名称空间中。要使用它,您需要使用模块名引用它。test2函数也会有同样的问题。将war.py更改为如下所示:

import deck

d = deck.Deck()
deck.test2()
d.test()

您将遇到的另一个错误是Deck.test方法不需要任何参数,但需要。在括号之间添加“self”(不带引号)。

您确定没有得到
类型错误:test()接受0个位置参数,但给出了1个
?由于您没有声明参数,即
self
@RNar:程序不会达到显示的程度,但一旦其他问题得到解决,就会遇到该错误。我在回答中提到了这一点。将“self”作为参数添加到
test()
似乎可以让它正常工作。我不知道如果你没有以某种方式改变对象,你需要一个“自我”参数。
deck.deck()
真的有必要吗,因为我不需要它来让我的代码正常工作。@Aaron:有了你发布的代码,这是必要的。根据你实际运行的代码,我们无法判断。这是您应该始终发布实际运行的代码的原因之一,而且最好是在新的解释器会话中运行发布的代码,以确保您之前运行的代码不会出错。如果您所拥有的只是导入deck,而不是类似于从deck import*导入的
(不推荐),那么是,是的。@Aaron:你用的是版本3还是版本2?我正在使用2.7,在使用
deck.deck()
之前出现错误。我没有使用过3,也没有访问它的权限,所以如果您使用的是较新的版本,请使用YMMV。另外,如果您从deck import deck
中执行类似于
的操作,那么deck类将位于您的命名空间中,并且您的代码可以工作,但是正如@user2357112所述,这不是您在上面发布的内容。也就是说,
import-Deck
通常比来自Deck-import-Deck
更受欢迎,以避免名称空间污染。我运行的代码只是通过将“self”参数添加到
test()
中进行了更改。将我的
war.py
类更改为包含
deck.deck()
抛出
AttributeError:'classobj'对象没有属性“deck”
。我正在Mono4.0.30319.17020(32位)上运行
2.9.9a0(IronPython2.9.9a0调试(2.9.0.0))
class Deck:

    def __init__(self):
        self.stack = self.shuffle()
        self.stackSize = len(self.stack)

    def __repr__(self):
        return str(self.stack.items())

    def shuffle(self):
        return {'2c': 'cards/2c.png', '3c': 'cards/3c.png', '4c': 'cards/4c.png', \
                '5c': 'cards/5c.png', '6c': 'cards/6c.png', '7c': 'cards/7c.png', \
                '8c': 'cards/8c.png', '9c': 'cards/9c.png', '10c': 'cards/10c.png', \
                'jc': 'cards/jc.png', 'qc': 'cards/qc.png', 'kc': 'cards/kc.png',
                'ac': 'cards/ac.png'} #continue w/ other suits


    def test():
        print("hello")

def test2():
    print("hello2")
import deck

d = deck.Deck()
deck.test2()
d.test()