-王玉陽まとめ(Code_boy)2018年11月16日
1 classPerson:2 name='xxx'3 age=2045 p=Person() #pはインスタンスオブジェクトです
6 print(p.name,p.age)7 p.name="yyy"8 p.gender='male'9print(p.name,p.gender,p.age)10print(Person.name,Person.age)
Person.age='30'
print(Person.age)
'''
'''
クラス人:#人の名前と年齢は公開されています
name = 'james'
age=20
'''
'''
class Person:
__ name = 'james' #private __name
age = 20
def show(self):#self >>自分
print(self .__ name、self.age)#自分にアクセスして、通常どおりに戻る
p=Person ()
p.show()#show()関数以外を呼び出す必要があります。そうしないと、クラスでのshowの実行が拒否されます。
print(Person .__ name)#クラス内のプライベート属性へのアクセスが異常に返される
print(p.age)
'''
1 classPerson:2 name ='xxx'3 gender ='x'4 age =056 p=Person()7print(p.name,p.gender,p.age)8print(Person.name,Person.gender,Person.age)910 p.name ='A'11 p.gender ='Male'12 p.age =201314 Person.name ='B'15 Person.gender ='Female'16 Person.age =211718print(p.name,p.gender,p.age) #pインスタンスオブジェクトのプロパティ
19 print(Person.name,Person.gender,Person.age) #個人クラスの属性
'''
1 classPerson:2 age =203 def show(self):4print(self.age)56 p.Person()
1 classPerson:2 name ='james'3 age =1245 def getName(self):6return self.name
78 def getAge(self):9return self.age
1011 p=Person()12print(p.getName(),p.getAge()) #インスタンス属性オブジェクト呼び出し
13 print(Person.getAge(p)) #クラス名の呼び出し
1 def show(self,s): #パラメータの受け渡し
2 print(self,s)34 p.show('hi') #'hi'sに渡される値
5 Person.show(p,'hello') #こんにちは'''
1 classPerson:2 age =203 @classmethod
4 def show(cls):5print(cls.age)67 p=Person()
1 classPerson:2 __name ='james'3 __age =1245 @classmethod
6 def show(self):7print(self)8print(self.__name,self.__age)910 Person.show()11 p=Person()12 p.show()'''
'''
定義:
1 classPerson:2 age =203 @staticmethod
4 def show():5print(Person.age)67 p =Person()
1 classPerson:2 __name ='james'3 __age =1245 @staticmethod
6 def show(): #パラメータなしで静的
7 print(Person.__name)89 p =Person()10 Person.show()11 p.show()
1 classPerson:2 name ='xxx'3 gender ='x'4 age =05 #インスタンス方式
6 def instanceShow(self):7print(self.name,self.gender,self.age)89 @classmethod #クラスメソッド
10 def classShow(cls):11print(cls.name,cls.gender,cls.age)1213 @staticmethod #静的メソッド
14 def staticShow():15print(Person.name,Person.gender,Person.age)161718 p=Person()19 p.instanceShow() #インスタンスメソッドの呼び出し
20 Person.classShow() #クラスメソッド呼び出し
21 Person.staticShow() #静的メソッド呼び出し
インスタンスメソッドは通常、インスタンスオブジェクトで呼び出されます
クラスメソッドと静的メソッドは通常、クラス名で呼び出されます
'''
構築方法(関数)...>完全な関数の初期化
@ コンストラクター__init __(self、...)は、オブジェクトが生成されるときに呼び出されます。
一部の初期化操作を実行するために使用できます。呼び出すために表示する必要はありません。システムはデフォルトで実行されます
ユーザーが構築方法を定義しない場合、システムはデフォルトの構築方法を単独で実行します
__ init __(self)は、オブジェクトが生成されるときに呼び出されます
__ del __(self)は、オブジェクトが解放されたときに呼び出されます
1 classPerson:2 def __init__(self,n,a):3 self.name=n
4 aelf.age=a
56 p=Person('xxx',20)7print(p.name,p.age)
@ オブジェクトが解放されると、デストラクタメソッド__del __(self)が呼び出され、その中でリソースを解放するためのいくつかの操作を実行できます。
電話をかける必要はありません
1 classPerson:2 def __init__(self,n,a):3 self.name = n
4 self.age = a
5 def __del__(self):6print('__del__',self.name,self.age)78 p=Person('xxx',20)9print(p.name,p.age)1011classPerson:12 def __init__(self):13print("__init__",self)14 def __del__(self):15print("__del__",self)1617 p=Person()
#__ init__完全なオブジェクトの初期化
1 classPerson:2 def __init__(self,n,g,a): #n,g,参照ユニット
3 self.name = n
4 self.gender = g
5 self.age = a
67 def show(self):8print(self.name,self.gender,self.age)910 p=Person('james','male',20) #pオブジェクトが決定された後、pオブジェクトの初期化(n、a、m)が完了します。
11 p.show()
#...__ init__でデフォルトのパラメータを設定します
1 classPerson:2 def __init__(self,n='',g='male',a=0):3 self.name = n
4 self.gender = g
5 self.age = a
67 def show(self):8print(self.name,self.gender,self.age)910 a =Person('james')11 b =Person('james','fenmale')12 c =Person('james','male',20)13 a.show() #結果:ジェームズ男性014 b.show() #結果:ジェームズフェンマレ015 c.show() #結果:ジェームズ男性2016# __init__パラメータにデフォルト値が設定されている場合、新しいコンテンツが渡された後、元の値が上書きされます。'''
1 classMyDate:2 __months =[0,31,28,31,30,31,30,31,31,30,31,30,31]3 def __init__(self,y,m,d):4if(y<0):5print("Error:無効な年")6if(m<1 or m>12):7print("Error:無効な月")8if(y%400==0 or y%4==0 and y%100!=0):9 MyDate.__months[2]=2910else:11 MyDate.__months[2]=281213if d<1 or d>MyDate.__months[m]:14print("Error:無効な日付")15 #日付、月、年がすべて合法になった後、クラスの属性(コンテンツ)を作成します
16 self.year = y
17 self.months = m
18 self.day = d
19 def show(self,end='\n'):20print("%d-%d-%d"%(self.year,self.months,self.day),end = end)2122 p =MyDate(2018,11,19)23 p.show()
1 classPerson:2 def __init__(self,name,gender,age):3 self.name = name
4 self.gender = gender
5 self.age = age
67 def show(self,end='\n'):8print(self.name,self.gender,self.age)910classStudent(Person):11 def __init__(self,name,gender,age,major,dept):12 Person.__init__(self,name,gender,age)13 self.major = major
14 self.dept = dept
1516 def show(self):17 Person.show(self,'')18print(self.major,self.dept)1920 s =Student('james','male',20,'softwart','computer')21 s.show()222324'''
25 結果:
26 james male 2027 softwart computer
28'''
上記のStrdentクラスの定義から、派生クラスのコンストラクターに加えて、独自の新しい追加を完了することがわかります。
majorプロパティとdeptプロパティの初期化に加えて、基本クラスのPersonコンストラクターを呼び出し、その呼び出しを表示する必要があります。
すなわち:Person .__ init __(self、neme、gender、age)
Personの__init__関数をクラス名Personから直接呼び出し、必要な4つの関数を提供します
基本クラスのコンストラクターは、クラスが継承されたときに自動的に呼び出されることはなく、呼び出しを表示する必要があります
基本クラスにインスタンスメソッドがある場合、継承されたクラスにまったく同じインスタンスメソッドを再定義できます。
たとえば、Personにはshowメソッドがあり、Studentには同じshowメソッドがあります。混乱することはありません。
StudentクラスのショーはPersonのショーをオーバーライドすると呼びます
-もちろん、基本クラスのインスタンスメソッドもオーバーライドできません。派生クラスはこの基本クラスのインスタンスメソッドを継承します。
1 classPerson:2 className ='Person' #独自のインスタンス属性
3 def __init__(self,name,gender,age):4 self.name = name
5 self.gender = gender
6 self.age = age
78 def show(self,end='\n'):9print(self.name,self.gender,self.age)1011 @classmethod #クラスメソッドの変更
12 def classClassName(cls):13print(cls.className)1415 @staticmethod #静的メソッド装飾
16 def staticClassName():17print(Person.className)1819 def display(self):20print('display')2122classStudent(Person):23 #className ='Student'24 def __init__(self,name,gender,age,major,dept):25 Person.__init__(self,name,gender,age)26 self.major = major
27 self.dept = dept
2829 def show(self):30 Person.show(self,'')31print(self.major,self.dept)3233 s =Student('A','male',20,'software','computer')34 s.show()35print(Student.className) #学生自身がいない場合は、上位レベル(人)が表示されます
36 Student.classClassName()37 Student.staticClassName()3839 s.display() #インスタンス呼び出し
404142 # 結果の説明:Studentは、Personのインスタンス、静的、およびクラス(属性)メソッドを継承します
43 # 結果:
44'''
45 A male 2046 software computer
47 Person
48 Person
49 Person
50 display
51'''
1 classMyDate:2 __months =[0,31,28,31,30,31,30,31,31,30,31,30,31]3 def __init__(self,y,m,d):4if(y<0):5print("Error:無効な年")6if(m<1 or m>12):7print("Error:無効な月")8if(y%400==0 or y%4==0 and y%100!=0):9 MyDate.__months[2]=2910else:11 MyDate.__months[2]=281213if d<1 or d>MyDate.__months[m]:14print("Error:無効な日付")15 #日付、月、年がすべて合法になった後、クラスの属性(コンテンツ)を作成します
16 self.year = y
17 self.months = m
18 self.day = d
19 def show(self,end='\n'):20print("%d-%d-%d"%(self.year,self.months,self.day),end = end)2122classMyDateTime(MyDate):23 def __init__(self,y,mo,d,h,mi,s):24 MyDate.__init__(self,y,mo,d)25if(h<0 or h>23 or mi<0 or mi>59 or s<0 or s>59):26print("Error:無効な時間")27 self.hour = h
28 self.minute = mi
29 self.second = s
3031 def show(self):32 MyDate.show(self,'\t')33print("%d:%d:%d"%(self.hour,self.minute,self.second))343536 p =MyDateTime(2018,11,19,21,21,54)37 p.show()3839 #結果:2018-11-1921:21:54
Recommended Posts