#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()
问问题
137 次
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 回答