オブジェクト指向プログラミングは、最も効果的なソフトウェア作成方法の1つです。オブジェクト指向プログラミングでは、現実世界の物事や状況を表すクラスを作成し、これらのクラスに基づいてオブジェクトを作成します。オブジェクトはPythonで遍在していると言えます。オブジェクトは、コードを使用して現実の世界をシミュレートします。オブジェクト=属性+メソッド、オブジェクトの特性は「属性」と呼ばれ、オブジェクトの動作は「メソッド」と呼ばれます。
クラスで関数を作成する際の違いは、自己を追加することです。pythonのクラスは、無数のオブジェクトを生成できます。オブジェクトのメソッドが呼び出されると、オブジェクトは独自の参照を最初のパラメーターとしてメソッドに渡します。 。
>>> classBALL:... def setname(self,name):... self.name=name
... def kick(self):...print('my name is %s, oh,who kick me?'%self.name)...>>> a=BALL()>>> a.setname('tom')>>> a.kick()
my name is tom, oh,who kick me?
>>> classDog():... def __init__(self,name,age):... self.name=name
... self.age=age
... def sit(self):...print(self.name.title()+' is now sitting')... def grow(self):...print(self.name.title()+' is '+str(self.age)+' years old')...>>> a=Dog('Tom',6) ####着信パラメータ名,age
>>> a.sit() ###渡されたパラメータを直接呼び出す
Tom is now sitting
>>> a.grow()
Tom is 6 years old
>>> classCar:... def __init__(self,make,model,year):... self.make=make
... self.model=model
... self.year=year
... def get_descriptive(self):...print(self.year+self.model+self.make)...>>> mycar=Car('China','ak','2018')>>> mycar.get_descriptive()
2018 akChina
classCar:
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odo=0
def get_descriptive(self):print(self.year+ self.model+ self.make)
def odometr(self):print("this car has "+str(self.odo)+" miles on it")>>> mycar=Car('China','ak','2020')>>> mycar.odometr()this car has 0 miles on it ###デフォルトのパラメータはゼロなので、結果はゼロです
>>> mycar=Car('china','ak','2010')>>> mycar.odo=23 ###直接変更し、pythonにインスタンス内で直接属性odoを見つけさせ、23に変更します。>>> mycar.odometr()this car has 23 miles on it
>>> classCar:... def __init__(self,make,model,year):... self.odo=0...print(self.year+ self.model+ self.make)...print("this car has "+str(self.odo)+" miles on it")... def updataodo(self,mileage): ####入力パラメータが元のデフォルト値になるように、その中にオブジェクトを再作成します
... self.odo=mileage
>>> mycar=Car('china','ak','2020')>>> mycar.updataodo(56)>>> mycar.odometr()this car has 56 miles on it
クラスが別のクラスを継承すると、他のクラスのすべての属性とメソッドが自動的に取得されます。すべてのクラスは親クラスと呼ばれ、新しいクラスはサブクラスと呼ばれます。簡単な例
>>> classParent():... def hello(self):...print("親クラスのメソッドを呼び出す")...>>>classson(Parent):... pass
...>>> a=son()>>> a.hello()
親クラスのメソッドを呼び出す
複雑な例
>>> classelectric(Car):
pass
>>> classmoto(Car):
def __init__(self,shape):
self.shape=shape
def getshape():print('moto is '+ self.shape)>>> mycar=electric('china','ak','2010')>>> mycar.get_descriptive()
2010 akchina
>>> classmoto(Car):... def __init__(self):... pass
...>>> mycar=moto('china','ak','2010')Traceback(most recent call last):
File "<stdin>", line 1,in<module>
TypeError:__init__() takes 1 positional argument but 4 were given
この例では、motoの定義時にエラーが報告されたことがわかります。これは、マジックスクエア_init_が内部で書き直され、新しい_init_が親クラスの属性を初期化しなかったためです。スーパー関数は、pythonが親クラスとサブクラスを関連付けるのに必要です。次のように:
>>> classmoto(Car):... def __init__(self,make,model,year):...super().__init__(make,model,year)...>>> my=moto('china','ak','2010')>>> my.get_descriptive()
2010 akchina
属性shapeがサブクラスに追加されます。これは、getshapeを追加するメソッドに対応します。
>>> classmoto(Car):... def __init__(self,make,model,year,shape):...super().__init__(make,model,year)... self.shape=shape
... def getshape(self):...print('moto is '+ self.shape)...>>> a =moto('cn','x','2020','sda')>>> a.getshape()
moto is sda
上で書いたクラスはclass.pyという名前のファイルに保存され、注釈情報をファイルに追加できます。この保存方法は、ファイルをモジュールに保存し、クラスimportCarから使用するときにモジュールをインポートすることです。
1つのモジュールに複数のクラスを格納したり、モジュール全体を直接インポートしたり、インポートクラスclass.Carclass.motoで必要なクラスを呼び出すためのピリオド表記を追加したりすることもできます。
Recommended Posts