#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()
2 に答える
問題は次のように単純化できます。
class Person:
print(Person)
これにより、 が発生しNameError
ます。クラスを構築するとき、クラスの本体が実行され、特別な名前空間に配置されます。type
その名前空間は、実際にクラスを作成する責任があるに渡されます。
あなたのコードではprint(Person)
、クラスPerson
が実際に作成される前に (クラスの本体が実行される段階で、クラス名に渡されtype
てバインドされる前に)しようとしていNameError
ます。
print が呼び出されたときにクラスに特定の情報を返すようにし、そのクラスのインスタンスを作成するときにその情報を出力したいようです。これを行う方法は、クラスの__repr__
(または、詳細については、 Python での __str__ と __repr__ の違い__str__
を参照してください) メソッドを定義することです。その後、クラスのインスタンスで 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.