Python親子関係--継承(反テロエリートケース、応用と練習)
26718 ワード
1.継承
1.1継承の概念
継承は、クラスAがクラスBから継承されるクラスBからメンバー情報を取得するクラス間関係を記述する.
メンバー情報を提供するクラスを親クラス(ベースクラス)と呼び、メンバー情報を取得するクラスを子クラス(派生クラス)と呼ぶ.
1.2継承の役割
子クラスでは、親クラスのメンバー(メンバー変数、メンバーメソッド)を使用できます.
1.3継承された構文フォーマット
1.4継承関係スペクトルの取得
Python内蔵プロパティを使用するmro__継承関係を表示できます
構文形式:クラス名.mro
説明:mroはMethod Resolution Orderメソッドの解析順序であり、すべてのクラスにPythonシステムのデフォルトから共通の親bojectがあります.
1.5注意事項子クラス親クラスにないメンバー を追加できます.親プライベートメンバーは継承できません 2.書き換え
2.1書き換えの概念
書き換えとは、子クラスで親と同じ名前のメンバーメソッドを定義することです.
2.2書き換えの役割
子クラスが親クラスのメンバーメソッドを書き換えた後、子クラスオブジェクトを使用してメソッドを呼び出すと、子クラスの書き換えメソッドが実行されます.
2.3サブクラスで親にアクセスする書き換え方法
フォーマット1:親クラス名.メソッド名(オブジェクト)
フォーマット2:super(本クラス名、オブジェクト).メソッド名()
(推奨)フォーマット3:super().メソッド名()
3.マルチ継承
3.1多継承の概念
1つのクラスが複数のクラスを同時に継承することをマルチ継承と呼ぶ
3.2マルチ継承構文フォーマットの定義
3.3複数継承関係における親メンバーへのアクセス競合
マルチ継承関係では、複数の親が同じ名前のメンバーを持ち、サブクラスが呼び出されると、継承関係の最初の宣言されたクラスメンバーが呼び出されます.
4.マルチステート
4.1多態の概念
1つのオブジェクトは多様な形態を有し、字の異なる使用環境では異なる形態でその機能を示し、このオブジェクトが多態的特徴を有すると称する.
例:一人で、先生でもあるし、父でもあるし、运転手でもある.
4.2アヒルのタイプ
アヒルのタイプは特殊な呼び出し現象であり、オブジェクトが文法的に呼び出し関係を満たすことができるが、オブジェクトは対応するオブジェクト形態を持っておらず、このオブジェクトがアヒルのタイプを備えていると呼ばれる.
アヒルのタイプは特殊な多態表現形式である.
例:水に浮かぶ飛ばない鳥は、遠くからアヒルと呼ばれ、アヒルは飛ばず、水面に浮かんでいる.しかし、理論的にはアヒルではありません.
4.3注意事項
マルチステートは通常、関係を継承する上で発生します.
ケース:テロ対策エリート基礎版
ケース:テロ対策エリート修復版
ケース:テロ対策エリート強化版
テロリストの数が増えると、傷害を適切に下げることができる.
反テロエリートスーパー強化版
1.1継承の概念
継承は、クラスAがクラスBから継承されるクラスBからメンバー情報を取得するクラス間関係を記述する.
メンバー情報を提供するクラスを親クラス(ベースクラス)と呼び、メンバー情報を取得するクラスを子クラス(派生クラス)と呼ぶ.
1.2継承の役割
子クラスでは、親クラスのメンバー(メンバー変数、メンバーメソッド)を使用できます.
1.3継承された構文フォーマット
class ( ):
pass
1.4継承関係スペクトルの取得
Python内蔵プロパティを使用するmro__継承関係を表示できます
構文形式:クラス名.mro
説明:mroはMethod Resolution Orderメソッドの解析順序であり、すべてのクラスにPythonシステムのデフォルトから共通の親bojectがあります.
1.5注意事項
2.1書き換えの概念
書き換えとは、子クラスで親と同じ名前のメンバーメソッドを定義することです.
2.2書き換えの役割
子クラスが親クラスのメンバーメソッドを書き換えた後、子クラスオブジェクトを使用してメソッドを呼び出すと、子クラスの書き換えメソッドが実行されます.
2.3サブクラスで親にアクセスする書き換え方法
フォーマット1:親クラス名.メソッド名(オブジェクト)
フォーマット2:super(本クラス名、オブジェクト).メソッド名()
(推奨)フォーマット3:super().メソッド名()
3.マルチ継承
3.1多継承の概念
1つのクラスが複数のクラスを同時に継承することをマルチ継承と呼ぶ
3.2マルチ継承構文フォーマットの定義
class ( 1, 2...):
pass
3.3複数継承関係における親メンバーへのアクセス競合
マルチ継承関係では、複数の親が同じ名前のメンバーを持ち、サブクラスが呼び出されると、継承関係の最初の宣言されたクラスメンバーが呼び出されます.
4.マルチステート
4.1多態の概念
1つのオブジェクトは多様な形態を有し、字の異なる使用環境では異なる形態でその機能を示し、このオブジェクトが多態的特徴を有すると称する.
例:一人で、先生でもあるし、父でもあるし、运転手でもある.
4.2アヒルのタイプ
アヒルのタイプは特殊な呼び出し現象であり、オブジェクトが文法的に呼び出し関係を満たすことができるが、オブジェクトは対応するオブジェクト形態を持っておらず、このオブジェクトがアヒルのタイプを備えていると呼ばれる.
アヒルのタイプは特殊な多態表現形式である.
例:水に浮かぶ飛ばない鳥は、遠くからアヒルと呼ばれ、アヒルは飛ばず、水面に浮かんでいる.しかし、理論的にはアヒルではありません.
4.3注意事項
マルチステートは通常、関係を継承する上で発生します.
ケース:テロ対策エリート基礎版
"""
:
1. , life:100 name:
2.
3. main,
4. , ,Hero Is
5.
6. ,
7. Person __str__ ,
8.
: <=0
break
"""
class Person: #
def __init__(self,name): # hp
self.name = name
self.hp = 100
def __str__(self): #
return "%s :%d" % (self.name, self.hp)
class Hero(Person): # ,
def fire(self,p):
damage = 40 #
# , self , p,
print("%s %s , %d " % (self.name, p.name, damage))
p.hp -= damage # hp
class Is(Person): #
def fire(self,p):
damage = 10
print("%s %s , %d " % (self.name, p.name, damage))
p.hp -= damage
def main(): #
# h , , Person name ,
h = Hero("【 】")
# is1 ,
is1 = Is("【 】")
while True: #
h.fire(is1) # h , is1
is1.fire(h) # is1 , h
print(h)
print(is1)
#
if h.hp <= 0:
print("%s , " % h.name)
break
if is1.hp <= 0:
print(" , ")
break
main() #
ケース:テロ対策エリート修復版
"""
——
:
----------------------- -----------------------
1. , life:100 name:
2.
3. main,
4. , ,Hero Is
5.
6. ,
7. Person __str__ ,
8.
: <=0
break
----------------------- -----------------------
9.
0 - 1- 70 - 99- 100
if..elif.. and
10.
class Person: #
def __init__(self,name): # hp
self.name = name
self.hp = 100
def __str__(self): #
return "%s :%d" % (self.name, self.hp)
class Hero(Person): # ,
def fire(self,p):
damage = 40 #
# , self , p,
print("%s %s , %d " % (self.name, p.name, damage))
if p.hp < damage: # hp
p.hp = 0 # 0,
else:
p.hp -= damage # hp
# str , , str
def __str__(self):
# , self
# state = "?"
if self.hp == 100:
state = " "
elif self.hp >= 70 and self.hp < 100:
state = " "
elif self.hp >= 1 and self.hp < 70:
state = " "
elif self.hp >= 0:
state = " "
return "%s :%s" % (self.name, state) #
class Is(Person): #
def fire(self,p):
damage = 10
print("%s %s , %d " % (self.name, p.name, damage))
if p.hp < damage: # hp
p.hp = 0 # 0,
else:
p.hp -= damage # hp
def main(): #
# h , , Person name ,
h = Hero("【 】")
# is1 ,
is1 = Is("【 】")
while True: #
h.fire(is1) # h , is1
is1.fire(h) # is1 , h
print(h)
print(is1)
print() # ,
#
if h.hp <= 0:
print("%s , " % h.name)
break
if is1.hp <= 0:
print(" , ")
break
main() #
ケース:テロ対策エリート強化版
"""
——
:
----------------------- -----------------------
1. , life:100 name:
2.
3. main,
4. , ,Hero Is
5.
6. ,
7. Person __str__ ,
8.
: <=0
break
----------------------- -----------------------
9.
0 - 1- 70 - 99- 100
if..elif.. and
10.
import random # random
class Person: #
def __init__(self,name): # hp
self.name = name
self.hp = 100
def __str__(self): #
return "%s :%d" % (self.name, self.hp)
class Hero(Person): # ,
def fire(self,p):
damage = 40 #
# , self , p,
print("%s %s , %d " % (self.name, p.name, damage))
if p.hp < damage: # hp
p.hp = 0 # 0,
else:
p.hp -= damage # hp
# str , , str
def __str__(self):
# , self
# state = "?"
if self.hp == 100:
state = " "
elif self.hp >= 70 and self.hp < 100:
state = " "
elif self.hp >= 1 and self.hp < 70:
state = " "
elif self.hp >= 0:
state = " "
return "%s :%s" % (self.name, state) #
class Is(Person): #
def fire(self,p):
damage = 10
print("%s %s , %d " % (self.name, p.name, damage))
if p.hp < damage: # hp
p.hp = 0 # 0,
else:
p.hp -= damage # hp
def main(): #
# h , , Person name ,
h = Hero("【 】")
# ,
is1 = Is("【 】")
is2 = Is("【 】")
is3 = Is("【 】")
while True: #
x = random.randint(1,3) # 1-3
if x == 1: # 1,
h.fire(is1)
elif x == 2: #
h.fire(is2)
else: #
h.fire(is3)
is1.fire(h) # is1 , h
is2.fire(h) #
is3.fire(h)
print(h) # 4
print(is1)
print(is2)
print(is3)
print() # ,
#
if h.hp <= 0:
print("%s , " % h.name)
break
#
if is1.hp <= 0 and is2.hp <= 0 and is3.hp <= 0:
print(" , ")
break
main() #
テロリストの数が増えると、傷害を適切に下げることができる.
反テロエリートスーパー強化版
"""
——
:
----------------------- -----------------------
1. , life:100 name:
2.
3. main,
4. , ,Hero Is
5.
6. ,
7. Person __str__ ,
8.
: <=0
break
----------------------- -----------------------
9.
0 - 1- 70 - 99- 100
if..elif.. and
10.
import random # random
class Person: #
def __init__(self,name): # hp
self.name = name
self.hp = 100
def __str__(self): #
return "%s :%d" % (self.name, self.hp)
class Hero(Person): # ,
def fire(self,p):
#
hit = random.randint(1,100)
if hit <= 80: # 80%
if p.hp == 0: # hp=0,
print(" %s , " % p.name)
else: # , ,
damage = random.randint(20,50) # 20-50
print("%s %s , %d " % (self.name, p.name, damage))
if p.hp < damage: # hp
p.hp = 0 # 0,
else:
p.hp -= damage # hp
else:
print(" ")
# str , , str
def __str__(self):
# , self
# state = "?"
if self.hp == 100:
state = " "
elif self.hp >= 70 and self.hp < 100:
state = " "
elif self.hp >= 1 and self.hp < 70:
state = " "
elif self.hp >= 0:
state = " "
return "%s :%s" % (self.name, state) #
class Is(Person): #
def fire(self,p):
#
hit = random.randint(1,100)
damage = random.randint(5,15)
if hit > 80:
print("%s %s , %d " % (self.name, p.name, damage))
if p.hp < damage: # hp
p.hp = 0 # 0,
else:
p.hp -= damage # hp
else:
print(" ")
def main(): #
# h , , Person name ,
h = Hero("【 】")
# ,
is1 = Is("【 】")
is2 = Is("【 】")
is3 = Is("【 】")
while True: #
x = random.randint(1,3) # 1-3
if x == 1: # 1,
h.fire(is1)
elif x == 2: #
h.fire(is2)
else: #
h.fire(is3)
is1.fire(h) # is1 , h
is2.fire(h) #
is3.fire(h)
print(h) # 4
print(is1)
print(is2)
print(is3)
print() # ,
#
if h.hp <= 0:
print("%s , " % h.name)
break
#
if is1.hp <= 0 and is2.hp <= 0 and is3.hp <= 0:
print(" , ")
break
main() #