非常简单的类(下面的源代码)用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()
谢谢!
答案 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()