Python:是执行的入口点(\uuuu main\uuuu)?

Python:是执行的入口点(\uuuu main\uuuu)?,python,class,object,Python,Class,Object,我编写了以下python代码,并尝试使用\uuuu main\uuu初始化两个类对象,但在运行python classPerson.py时出现了以下错误。我想知道在python中初始化类对象的正确方法是什么 Person(object): def __init__(self, name, salary): self.name = name self.salary = salary def getName(): return se

我编写了以下python代码,并尝试使用
\uuuu main\uuu
初始化两个类对象,但在运行
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
回溯(最近一次呼叫最后一次):
文件“classTest1.py”,第1行,在
类人(对象):
文件“classTest1.py”,第14行,本人
鲍勃=人(“鲍勃·史密斯”,40000)
NameError:未定义名称“Person”

如果将
缩进到“\uuuuu name\uuuuuu==”\uuuuuuu main\uuuuuuuuuu”
阻止一个级别太远。试着跑步

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
类中,并且您在构建该类之前正在创建该类的对象,这会给您带来一个错误。

您需要取消将
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的
    包含一个引号,最好使用双引号分隔该字符串)

  • 定义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评论更正了上一句话

    EDIT调用方法的正确方法是使用括号,定义方法的正确方法是在参数中使用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)
    

    您的代码是无效的,因为最后一个字符串文字无法编译(在值周围加上一个未转义的单引号)。请检查最后一个
    print
    语句:问题还比较多,;你需要注意这些方法是如何工作的(提示:调用它们将是一个开始,给方法提供正确的参数也会有帮助)。更正了它,不在乎有多少不惯用的python代码哇,你们太快了!非常感谢你!你们提醒了我缩进在python中的重要性!:)欣赏它。代码还有几个问题;请参阅我的答案,以解决Sukrit尚未解决的另一个问题。:-)真不敢相信我错过了马蒂恩!将立即在代码中修复它。谢谢。:)根据这些方法,应该命名为
    get_name
    get_salary
    @Matthias:我对新手的命名规则并不挑剔。这一切都会在以后发生。这就是为什么我添加它作为一个评论,而不是试图写一个自己的答案。