pythonオブジェクト向けプログラミングの組み合わせと継承
転載先:https://www.cnblogs.com/renpingsheng/p/7132407.html
クラスとクラスの間には、継承と組合せの2つの関係があります.マルチコンビネーションは少なく継承したほうがいいです.
まず2つの例を見てみましょう.まず2つのクラスを定義します.1つの先生クラス、先生クラスには名前、年齢、生まれた年、月と日、教えた授業などの特徴と歩くこと、教える技能があります.
もう一つの学生類を定義し、学生類には名前、年齢、生まれた年、月と日、学習のグループ名などの特徴と歩く、学習する技能がある.
クラスの継承という特性に基づいて,コードを縮小することができる.
人間を定義し、教師クラスと学生クラスに人間の特徴とスキルを継承させます.
更に先生と学生を実例化して、1人の先生と1人の学生を得ます.
今、t 1とs 1の名前、年齢、生まれた年、月、日を知りたいのは簡単ですが、t 1やs 1の誕生日を一度に印刷するのはそんなに簡単ではありません.このとき、文字列でつなぎ合わせる必要があります.もっと良い方法はありませんか.
それが組み合わせです.
誰もが誕生日を持っていると言えますが、人が誕生日とは言えないので、組み合わせの機能を使う必要があります.生年月日と日を別の日付のクラスに定義して、先生や学生とこの日付のクラスを組み合わせると、先生t 1や学生s 1の誕生日が簡単に得られ、文字列のつなぎ合わせが面倒になりません.次のコードを見てみましょう.
これにより、先生t 1や学生s 1の名前、年齢などの特徴や歩く、教える、学ぶスキルを、前と同じ方法で呼び出すことができる.
出力:
どうやって彼らの誕生日を知ることができますか?
出力:
このbirthは子クラスTeacherが親クラスPeopleから継承したもので、親クラスPeopleのbirthはDateというクラスと組み合わせられているので、このbirthはオブジェクトです.Dateクラスの下にbirth_がありますinfoのスキルは、Dateの下のbirth_を呼び出すことができます.infoという関数の属性は先生t 1の誕生日を知っています.
結果は次のとおりです.
同様に、実例学生s 1の誕生日も同様の方法で知りたい:
結果は次のとおりです.
コンビネーションとは、1つのクラスで別のクラスに使用され、いくつかのクラスをつなぎ合わせることです.コンビネーションの機能も重複コードを減らすためです.
クラスとクラスの間には、継承と組合せの2つの関係があります.マルチコンビネーションは少なく継承したほうがいいです.
まず2つの例を見てみましょう.まず2つのクラスを定義します.1つの先生クラス、先生クラスには名前、年齢、生まれた年、月と日、教えた授業などの特徴と歩くこと、教える技能があります.
class Teacher:
def __init__(self,name,age,year,mon,day):
self.name=name
self.age=age
self.year=year
self.mon=mon
self.day=day
def walk(self):
print("%s is walking slowly"%self.name)
def teach(self):
print("%s is teaching"%self.name)
もう一つの学生類を定義し、学生類には名前、年齢、生まれた年、月と日、学習のグループ名などの特徴と歩く、学習する技能がある.
class Student:
def __init__(self,name,age,year,mon,day):
self.name=name
self.age=age
self.year=year
self.mon=mon
self.day=day
def walk(self):
print("%s is walking slowly"%self.name)
def study(self):
print("%s is studying"%self.name)
クラスの継承という特性に基づいて,コードを縮小することができる.
人間を定義し、教師クラスと学生クラスに人間の特徴とスキルを継承させます.
class People:
def __init__(self,name,age,year,mon,day):
self.name=name
self.age=age
self.year=year
self.mon=mon
self.day=day
def walk(self):
print("%s is walking"%self.name)
class Teacher(People):
def __init__(self,name,age,year,mon,day,course):
People.__init__(self,name,age,year,mon,day)
self.course=course
def teach(self):
print("%s is teaching"%self.name)
class Student(People):
def __init__(self,name,age,year,mon,day,group):
People.__init__(self,name,age,year,mon,day)
self.group=group
def study(self):
print("%s is studying"%self.name)
更に先生と学生を実例化して、1人の先生と1人の学生を得ます.
t1=Teacher("alex",28,1989,9,2,"python")
s1=Student("jack",22,1995,2,8,"group2")
今、t 1とs 1の名前、年齢、生まれた年、月、日を知りたいのは簡単ですが、t 1やs 1の誕生日を一度に印刷するのはそんなに簡単ではありません.このとき、文字列でつなぎ合わせる必要があります.もっと良い方法はありませんか.
それが組み合わせです.
, 。
誰もが誕生日を持っていると言えますが、人が誕生日とは言えないので、組み合わせの機能を使う必要があります.生年月日と日を別の日付のクラスに定義して、先生や学生とこの日付のクラスを組み合わせると、先生t 1や学生s 1の誕生日が簡単に得られ、文字列のつなぎ合わせが面倒になりません.次のコードを見てみましょう.
class Date:
def __init__(self,year,mon,day):
self.year=year
self.mon=mon
self.day=day
def birth_info(self):
print("The birth is %s-%s-%s"%(self.year,self.mon,self.day))
class People:
def __init__(self,name,age,year,mon,day):
self.name=name
self.age=age
self.birth=Date(year,mon,day)
def walk(self):
print("%s is walking"%self.name)
class Teacher(People):
def __init__(self,name,age,year,mon,day,course):
People.__init__(self,name,age,year,mon,day)
self.course=course
def teach(self):
print("%s is teaching"%self.name)
class Student(People):
def __init__(self,name,age,year,mon,day,group):
People.__init__(self,name,age,year,mon,day)
self.group=group
def study(self):
print("%s is studying"%self.name)
t1=Teacher("alex",28,1989,9,2,"python")
s1=Student("jack",22,1995,2,8,"group2")
これにより、先生t 1や学生s 1の名前、年齢などの特徴や歩く、教える、学ぶスキルを、前と同じ方法で呼び出すことができる.
print(t1.name)
t1.walk()
t1.teach()
出力:
alex
alex is walking
alex is teaching
どうやって彼らの誕生日を知ることができますか?
print(t1.birth)
出力:
<__main__. class="hljs-built_in">Date object at 0x0000000002969550>
このbirthは子クラスTeacherが親クラスPeopleから継承したもので、親クラスPeopleのbirthはDateというクラスと組み合わせられているので、このbirthはオブジェクトです.Dateクラスの下にbirth_がありますinfoのスキルは、Dateの下のbirth_を呼び出すことができます.infoという関数の属性は先生t 1の誕生日を知っています.
t1.birth.birth_info()
結果は次のとおりです.
The birth is 1989-9-2
同様に、実例学生s 1の誕生日も同様の方法で知りたい:
s1.birth.birth_info()
結果は次のとおりです.
The birth is 1995-2-8
コンビネーションとは、1つのクラスで別のクラスに使用され、いくつかのクラスをつなぎ合わせることです.コンビネーションの機能も重複コードを減らすためです.