在Python中调用类函数后获取AttributeError

时间:2010-12-07 02:40:43

标签: python

非常简单的类(下面的源代码)用Python编写。

构造obj1 = myClass(12)并调用类函数obj1.printInfo()后,我收到错误 - AttributeError: type object 'myClass' has no attribute 'arg1'问题的根源可能是什么?

class myClass(object):

    def __init__(self, arg1, arg2 = 0):
        self.arg1 = arg1
        self.arg2 = arg2

    def printInfo (self):
        print myClass.arg1, myClass.arg2


obj1 = myClass(12)
obj1.printInfo()

谢谢!

3 个答案:

答案 0 :(得分:3)

您想使用printInfo(self)的主体替换:

def printInfo(self):
    print self.arg1, self.arg2

在这里使用self不是指定范围,因为它有时在Java(MyClass.this)或PHP中使用。在这个函数中,self实际上是包含arg1和arg2的对象。 Python以这种方式非常明确。在您之前的方法中,您为self分配了arg1和arg2,因此您应该期望从自己获得arg1和arg2。

关于第二个问题,如果你想要一个“类”函数(即静态方法),那么你仍然需要引用你的obj1来访问它的属性。例如:

class MyClass(object):

    def __init__(self, arg1, arg2 = 0):
        self.arg1 = arg1
        self.arg2 = arg2

    @staticmethod
    def printInfo(obj):
        print obj.arg1, obj.arg2


obj1 = MyClass(12)
MyClass.printInfo(obj1)

如果有机会,请务必阅读PEP8:)

答案 1 :(得分:1)

脑屁,嗯?将myClass.arg1切换为self.arg1

def printInfo (self):
    print self.arg1, self.arg2

答案 2 :(得分:0)

你可以这样做:

def f1(arg1, arg2):
    print arg1, arg2

class myClass(object):
    def __init__(self, arg1, arg2 = 0):
        self.arg1 = arg1
        self.arg2 = arg2
    def printInfo (self):
        f1(self.arg1, self.arg2)

obj1 = myClass(12)
obj1.printInfo()