2017-04-01 3 views
-1

私はSchoolMemberの基本クラスを持ち、2つのクラスを派生したコードを書いた:Teacher & Student。以下のコードを参照してください:継承に関するPythonプログラミング

class SchoolMember: 
    '''Represents school member''' 
    def __init__(self,name,age): 
     self.name=name 
     self.age=age 
     print('Initialised school member is:', format(self.name)) 

    def tell(self): 
     print ('Name: \t Age: ', format(self.name, self.age)) 

class Teacher(SchoolMember): 
    def __init__(self,name,salary,age): 
     SchoolMember.__init__(self,name,age) 
     self.salary=salary 
     print ('Initialised teacher is ', format(self.name)) 

    def tell(self): 
     '''Prints the salary of the teacher''' 
     print('Salary of teacher is ', format(self.salary)) 

class Student(SchoolMember): 
    def __init__(self,name,age,fees): 
     SchoolMember.__init__(self,name,age) 
     self.fees=fees 
     print('Initialised student is',format(self.name)) 

    def tell(self): 
     '''Tells the fees of the student''' 
     print('Fees of student is', format(self.fees)) 

t = Teacher('Richa', 26,4000) 
s = Student('Shubh',21, 2000) 

print() 
members = [t,s] 
for member in members: 
    member.tell() 

出力:

('Initialised school member is:', 'Richa') 
('Initialised teacher is ', 'Richa') 
('Initialised school member is:', 'Shubh') 
('Initialised student is', 'Shubh') 
() 
('Salary of teacher is ', '4000') 
('Fees of student is', '2000') 

、私の質問です:どのように出力の年齢を取得しますか?

+0

私はあなたが何を求めているのか不明です。あなたはtellの基本クラスのバージョンや、Martijnが答えているフォーマットの問題を呼び出す方法、あるいは何か他の問題を尋ねていますか? – Foon

答えて

1

format() functionのドキュメントを参照してください。あなたはそれが設計された方法でそれを使用していません。この関数は、指定(オプションの第2引数)に従って値をフォーマットします。

実際には、にすべてを使用する必要はありません。

使用str.format()代わりに、文字列の方法:

print 'Name: {}\t Age: {}'.format(self.name, self.age) 

はここ{}プレースホルダを使用すると、メソッドに渡す値に置き換えられます。

私は関数としてprintを使用しなかったことに注意してください。 Python 2ではステートメントです。このため、を実行すると()が表示されます。それはちょうどprint tuple()です。 で、モジュールの最上部にはfrom __future__ import print_functionを使用していますが、今のところ私は古い記述に固執します。単にPython 3に完全に切り替えるほうがよいでしょう。

次に、あなたはサブクラスから直接上書きSchoolMember.tell()方法を実行したい:

def tell(self): 
    '''Tells the fees of the student''' 
    SchoolMember.tell(self) 
    print 'Fees of student is {}'.format(self.fees) 

あなたがクラスにメソッド結合していないにアクセスするため、手動でselfに渡す必要があります。

新しいスタイルのクラス(object、Python 3のデフォルトの基底クラス)を継承する場合は、super() functionも使用できます。あなたのチュートリアルでsuper()がすでにを使用していますが、それを動作させることができなかった場合は、Python 3のチュートリアルに従う可能性が高く、従来のバージョンの言語を使用するのではなく、アップグレードしたいと考えています。