Python 基礎 クラス
メモ。クラスいろいろ。
class Car: #クラス変数 maker="PEACE" #自動車メーカー count=0 #台数 #初期化メソッド def __init__(self,color="white"): self.color=color #引数で受け取った値を代入 self.mileage=0 #0からスタート #インスタンスメソッド def drive(self,km): self.mileage += km msg=f"{km}kmドライブしました。総距離は{self.mileage}kmです。" print(msg) car1=Car() car1.drive(15) #15kmドライブしました。総距離は15kmです。 car1.drive(20) #20kmドライブしました。総距離は35kmです。 car2=Car() car2.drive(10) #10kmドライブしました。総距離は10kmです。 car1.drive(10) #10kmドライブしました。総距離は45kmです。 print("----------") class Spam: val=100 def ham(self): self.egg("call method") def egg(self,msg): print(msg) print(self.val) spam=Spam() spam.ham() #call method 100 print("----------") #継承 class Base: def method_base(self): print("Base") class Derived(Base): def method_derived(self): print ("Derived") self.method_base() #親のメソッドを実装できる derived = Derived() #インスタンス生成 derived.method_base() #Base 親のメソッドを実行できる derived.method_derived() #Derived Base 差分のメソッドのみ実装している print("----------") #オーバーライド class Base2: def method_base(self): print("Base") class Derived2(Base2): def method_derived(self): print ("Derived") def method_base(self): print("Override") derived2 = Derived2() #インスタンス生成 derived2.method_base() #Base オーバーライド print("----------") #スーパークラスの初期化メソッドに引数を渡す #スーパークラス class Person: def __init__(self,name,age): self.name=name self.age=age person=Person("Nakamura",23) print(person.name) #Nakamura print(person.age) #23 #サブクラス class Player(Person): def __init__(self,number,position): #Personクラスの初期化メソッドをオーバーライドしてしまう self.number=number self.position=position player=Player(10,"MF") #print(player.name) #err #print(player.age) #err print(player.number) #10 print(player.position) #MF print("----------") #サブクラス class NewPlayer(Person): def __init__(self,name,age,number,position): super().__init__(name,age) #スーパークラスの初期化メソッドを呼び出す self.number=number self.position=position newplayer=NewPlayer("Honda",30,5,"FW") print(newplayer.name) #Honda print(newplayer.age) #30 print(newplayer.number) #5 print(newplayer.position) #FW print("----------") #プロパティ class Person2: def __init__(self,name): self.__name=name #非公開のインスタンス変数 def who(self): print(self.__name + "です。") #クラス内では利用可能 man=Person2("Kagawa") print(man.who()) #print(man.__name) #err 直接アクセスするとエラー print("----------") #ゲッター、セッター class Goods: #初期化メソッド def __init__(self,name,price): #非公開のインスタンス変数(辞書) self.__data={"name":name, "price":price} #nameプロパティ(ゲッター) @property def name(self): return self.__data["name"] #nameプロパティ(セッター) @name.setter def name(self,value): self.__data["name"]=value #__data辞書のnameキーに値を設定する #priceプロパティ(ゲッター) priceにはセッター関数がないのでリードオンリー @property def price(self): price=self.__data["price"] #__data辞書のpriceキーの値を取り出す price_str=f"{price:,}円" return price_str shoes=Goods("Dream",5400) print(shoes.name) #Dream shoes.name="New Dream" #更新可能 print(shoes.name) #New Dream print(shoes.price) #5,400円 #shoes.price=7200 #err 更新しようとするとエラーになります リードオンリーなので