-3
#C:/Python32

class Person:
    def __init__(self, name  = "joe" , age= 20 , salary=0):
        self.name = name
        self.age = age
        self.salary = salary
    def __printData__(self):
            return " My name is {0}, my age is {1} , and my salary is {2}.".format(self.name, self.age, self.salary)
    print(Person)

class Employee(Person):
    def __init__(self, name, age , salary ):
        Person. __init__ (self,name = "Mohamed"  , age = 20 , salary = 100000)
        def __printData__(self):
            return " My name is {0}, my age is {1} , and my salary is {2}.".format(self.name, self.age, self.salary)
    print(Employee)


p= Person()
e = Employee()
4

2 回答 2

5

您的问题可以简化为:

 class Person:
      print(Person)

这将引发NameError. 在构造一个类时,类的主体被执行并放置在一个特殊的命名空间中。然后将该名称空间传递给type负责实际创建类的名称空间。

在您的代码中,您试图在实际创建print(Person)类之前Person(在执行类主体的阶段 - 在它被传递到type类名并绑定到类名之前),这会导致NameError.

于 2013-05-25T17:09:56.193 回答
0

您似乎希望在调用 print 时让您的类返回某些信息,并且您还希望在创建该类的实例时打印该信息。您这样做的方法是为您的类定义一个__repr__( 或__str__,有关更多信息,请参见Python 中的 __str__ 和 __repr__ 之间的差异) 方法。然后每次在您的类的实例上调用 print 时,它将打印该__repr__方法返回的内容。然后你可以在你的__init__方法中添加一行来打印实例。在类内部,当前实例由特殊self关键字引用,类的名称只定义在类范围之外,在主命名空间中。所以你应该打电话print(self)而不是print(Person). 这是您的示例的一些代码:

class Person:
    def __init__(self, name  = "joe" , age= 20 , salary=0):
        self.name = name
        self.age = age
        self.salary = salary
        print(self)
    def __repr__(self):
        return " My name is {0}, my age is {1} , and my salary is {2}.".format(self.name, self.age, self.salary)

joe = Person()
>>> My name is joe, my age is 20 , and my salary is 0.
于 2013-05-25T17:27:56.220 回答