-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__(または、詳細については、 Python での __str__ と __repr__ の違い__str__を参照してください) メソッドを定義することです。その後、クラスのインスタンスで print が呼び出されるたびに、そのメソッドによって返されたものが出力されます。次に、インスタンスを出力する行をメソッドに追加するだけです。クラス内では、現在のインスタンスは特別なキーワードによって参照されます。クラスの名前は、メインの名前空間で、クラスのスコープ外でのみ定義されます。だからあなたは電話するべきであり、そうではありません__repr____init__selfprint(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 に答える