我编写了以下python代码,并尝试使用__main__
初始化两个类对象,但在运行python classPerson.py
时出现以下错误。我想知道在python中初始化类对象的正确方法是什么。
Person(object):
def __init__(self, name, salary):
self.name = name
self.salary = salary
def getName():
return self.name
def getSalary():
return self.salary
if __name__ == '__main__':
bob = Person('Bob Smith', 40000)
sue = Person('Sue Funk', 35000)
print 'bob makes a salary of %d' % (bob.getSalary)
print 'sue's full name is %s' % (sue.getName)
错误:
Traceback (most recent call last):
File "classTest1.py", line 1, in <module>
class Person(object):
File "classTest1.py", line 14, in Person
bob = Person('Bob Smith', 40000)
NameError: name 'Person' is not defined
答案 0 :(得分:4)
您需要 unindent if __name__
阻止 成为Person
类的一部分。
它执行得太早,当时仍在构建Person
类。
通过将其缩进到与Person
类主体中的方法相同的级别,您可以使用类定义的测试部分。它正在执行时仍然定义类,因此Person
类引用尚不存在。
更正后的代码:
class Person(object):
def __init__(self, name, salary):
self.name = name
self.salary = salary
def getName(self):
return self.name
def getSalary(self):
return self.salary
if __name__ == '__main__':
bob = Person('Bob Smith', 40000)
sue = Person('Sue Funk', 35000)
print 'bob makes a salary of %d' % (bob.getSalary())
print "sue's full name is %s" % (sue.getName())
注意:
getSalary()
和getName()
方法。self
参数。sue's
包含单引号,最好使用双引号来分隔该字符串。)答案 1 :(得分:4)
在定义时,你不能使用Person类,你必须将它缩小一个缩进级别
class Person(object):
def __init__(self, name, salary):
self.name = name
self.salary = salary
def getName(self):
return self.name
def getSalary(self):
return self.salary
if __name__ == '__main__':
bob = Person('Bob Smith', 40000)
sue = Person('Sue Funk', 35000)
print 'bob makes a salary of %d' % (bob.getSalary())
print "sue's full name is %s" % (sue.getName())
编辑根据Sukrit Kalra评论更正了最后一条声明
编辑调用方法的正确方法是使用括号,并且正确的方法来定义它是在参数中使用self 但是使用该类的惯用方法是不要使用getter和setter
class Person(object):
def __init__(self, name, salary):
self.name = name
self.salary = salary
if __name__ == '__main__':
bob = Person('Bob Smith', 40000)
sue = Person('Sue Funk', 35000)
print 'bob makes a salary of %d' % (bob.salary)
print "sue's full name is %s" % (sue.name)
答案 2 :(得分:2)
您将if __name__ == "__main__"
块缩进了一个级别太远了。尝试运行
class Person(object):
def __init__(self, name, salary):
self.name = name
self.salary = salary
def getName(self):
return self.name
def getSalary(self):
return self.salary
if __name__ == '__main__':
bob = Person('Bob Smith', 40000)
sue = Person('Sue Funk', 35000)
print 'bob makes a salary of %d' % (bob.getSalary())
print "sue's full name is %s" % (sue.getName())
因为在你的代码中,if
块在Person
类中,并且在构建类之前你正在创建该类的对象,所以它会给你一个错误。