""" 注:コードをコピーしないでください。メッセージを残して、エラーがある場合は「」を指摘してください。
1 import re
23'''
4 classPerson:5 name='xxx'6 age=2078 p=Person() #pはインスタンスオブジェクトです
9 print(p.name,p.age)10 p.name="yyy"11 p.gender='male'12print(p.name,p.gender,p.age)13print(Person.name,Person.age)14 #p(インスタンスオブジェクト)は、値を変更するためのPersonクラスのコンテンツには影響しません。
15 Person.age='30'16print(Person.age)17 #classPerson(class)変更する価値がある場合、Personクラスのコンテンツが影響を受けます
18'''
1920 # アクセス許可(クラス属性)21'''
22 classPerson: #人の名前と年齢は公開されています
23 name ='james'24 age=2025 #プライベートになるために前に2つのアンダースコアを追加することがpythonで規定されています
26'''
27'''
28 classPerson:29 __name ='james' #民間__name
30 age =203132 def show(self): #self >>自分
33 print(self.__name,self.age) #自分自身を訪問し、通常どおりに戻る
34353637 p=Person()38 p.show() #show()関数以外を呼び出す必要があります。そうしないと、クラスでのshowの実行が拒否されます。
39 print(Person.__name) #クラス内のプライベート属性へのアクセスが異常に返される
40 print(p.age)41 #プライベート関数呼び出しがある場合も同じです。プライベート関数、要素はクラスでのみ使用できます
42 # 一般的に使用される方法は、パブリック関数を呼び出すことにより、関数内のプライベートプロパティの呼び出しを実行することです。
43'''
4445 # ケース:個人情報の書き込みとオブジェクトアクセス属性の確立
46'''
47 classPerson:48 name ='xxx'49 gender ='x'50 age =05152 p=Person()53print(p.name,p.gender,p.age)54print(Person.name,Person.gender,Person.age)5556 p.name ='A'57 p.gender ='Male'58 p.age =205960 Person.name ='B'61 Person.gender ='Female'62 Person.age =216364print(p.name,p.gender,p.age) #pインスタンスオブジェクトのプロパティ
65 print(Person.name,Person.gender,Person.age) #個人クラスの属性
66'''
6768 # インスタンス方式
69'''
70 classPerson:71 age =2072 def show(self):73print(self.age)7475 p.Person()76 #インスタンスメソッドには少なくとも1つのパラメーターがあり、通常はパラメーターとして(self)という名前の変数があります(名前はカスタマイズできます)
77 # インスタンスメソッドは、インスタンスオブジェクトを介して呼び出されます。例:p.show()78 #クラス名を使用して呼び出す場合は、インスタンスパラメータを手動で渡す必要があります。例:Person.show(p)79 #インスタンスメソッドが呼び出され、インスタンスオブジェクトが最初のパラメータに渡されます
80'''
81'''
82 classPerson:83 name ='james'84 age =128586 def getName(self):87return self.name
8889 def getAge(self):90return self.age
9192 p=Person()93print(p.getName(),p.getAge()) #インスタンス属性オブジェクト呼び出し
94 print(Person.getAge(p)) #クラス名の呼び出し
95'''
96'''
97 def show(self,s): #パラメータの受け渡し
98 print(self,s)99100 p.show('hi') #'hi'sに渡される値
101 Person.show(p,'hello') #こんにちは'''
102103 # クラスメソッド
104'''
105 classPerson:106 age =20107 @classmethod
108 def show(cls):109print(cls.age)110111 p=Person()112'''
113 # 使用するクラスメソッド@変更するclassmethodであり、最初のパラメーターは通常clsという名前です(他の名前も名前を付けることができます)
114 # クラスメソッドは通常、クラスの名前で呼び出されます。例:Person.show()115 #クラスメソッドは、インスタンスメソッドから呼び出すこともできます。例:p.show()116 #クラスメソッドが呼び出されると、クラスの名前が最初のパラメーターに渡されます
117'''
118 classPerson:119 __name ='james'120 __age =12121122 @classmethod
123 def show(self):124print(self)125print(self.__name,self.__age)126127 Person.show()128 p=Person()129 p.show()'''
130131 # 静的メソッド
132'''
133 定義:
134 classPerson:135 age =20136 @staticmethod
137 def show():138print(Person.age)139140 p =Person()141142 #静的変数関数が渡されました@staticmethodの変更
143 # 通常、静的メソッドを呼び出すには、クラスの名前またはインスタンスを使用します。例:Person.show(),p.show()144 #静的関数を呼び出すときに、パラメーターは関数に渡されません
145'''
146'''
147 classPerson:148 __name ='james'149 __age =12150151 @staticmethod
152 def show(): #パラメータなしで静的
153 print(Person.__name)154155 p =Person()156 Person.show()157 p.show()158'''
159160 # クラス、インスタンス、静的メソッドは異なります-Person
161'''
162 classPerson:163 name ='xxx'164 gender ='x'165 age =0166 #インスタンス方式
167 def instanceShow(self):168print(self.name,self.gender,self.age)169170 @classmethod #クラスメソッド
171 def classShow(cls):172print(cls.name,cls.gender,cls.age)173174 @staticmethod #静的メソッド
175 def staticShow():176print(Person.name,Person.gender,Person.age)177178179 p=Person()180 p.instanceShow() #インスタンスメソッドの呼び出し
181 Person.classShow() #クラスメソッド呼び出し
182 Person.staticShow() #静的メソッド呼び出し
183'''
184'''
185 インスタンスメソッドは通常、インスタンスオブジェクトで呼び出されます
186 クラスメソッドと静的メソッドは通常、クラス名で呼び出されます
187'''
188189 # オブジェクトの初期化
190'''
191 工法(機能)...>完全な関数の初期化
192 @ 工法__init__(self,...)オブジェクトが生成されたときに呼び出され、
193 一部の初期化操作を実行するために使用できます。呼び出すために表示する必要はありません。システムはデフォルトで実行されます
194 ユーザーが構築方法を定義しない場合、システムはデフォルトの構築方法を単独で実行します
195196 classPerson:197 def __init__(self,n,a):198 self.name=n
199 aelf.age=a
200201 p=Person('xxx',20)202print(p.name,p.age)203204 @破壊方法__del__(self)オブジェクトが解放されたときに呼び出され、内部のリソースを解放するためにいくつかの操作を実行できます
205 電話をかける必要はありません
206207 classPerson:208 def __init__(self,n,a):209 self.name = n
210 self.age = a
211 def __del__(self):212print('__del__',self.name,self.age)213214 p=Person('xxx',20)215print(p.name,p.age)216''''''217classPerson:218 def __init__(self):219print("__init__",self)220 def __del__(self):221print("__del__",self)222223 p=Person()'''
224225 #__ init__オブジェクトの初期化を完了する
226'''
227 classPerson:228 def __init__(self,n,g,a): #n,g,参照ユニット
229 self.name = n
230 self.gender = g
231 self.age = a
232233 def show(self):234print(self.name,self.gender,self.age)235236 p=Person('james','male',20) #pオブジェクトが決定された後、pオブジェクトの初期化(n、a、m)が完了します。
237 p.show()238'''
239 # Pythonの規定:クラスには1つのコンストラクターしか存在できません
240 #...__ init__でデフォルトパラメータを設定する
241'''
242 classPerson:243 def __init__(self,n='',g='male',a=0):244 self.name = n
245 self.gender = g
246 self.age = a
247248 def show(self):249print(self.name,self.gender,self.age)250251 a =Person('james')252 b =Person('james','fenmale')253 c =Person('james','male',20)254 a.show() #結果:ジェームズ男性0255 b.show() #結果:ジェームズフェンマレ0256 c.show() #結果:ジェームズ男性20257# __init__パラメータにデフォルト値が設定されている場合、新しいコンテンツが渡された後、元の値が上書きされます。'''
258259 # 場合:日付クラスMyDate
260'''
261 classMyDate:262 __months =[0,31,28,31,30,31,30,31,31,30,31,30,31]263 def __init__(self,y,m,d):264if(y<0):265print("Error:無効な年")266if(m<1 or m>12):267print("Error:無効な月")268if(y%400==0 or y%4==0 and y%100!=0):269 MyDate.__months[2]=29270else:271 MyDate.__months[2]=28272273if d<1 or d>MyDate.__months[m]:274print("Error:無効な日付")275 #日付、月、年がすべて合法になった後、クラスの属性(コンテンツ)を作成します
276 self.year = y
277 self.months = m
278 self.day = d
279 def show(self,end='\n'):280print("%d-%d-%d"%(self.year,self.months,self.day),end = end)281282 p =MyDate(2018,11,19)283 p.show()284'''
285286 # クラスの継承
287 # 派生と継承:学生:名前性別年齢
288'''
289 classPerson:290 def __init__(self,name,gender,age):291 self.name = name
292 self.gender = gender
293 self.age = age
294295 def show(self,end='\n'):296print(self.name,self.gender,self.age)297298classStudent(Person):299 def __init__(self,name,gender,age,major,dept):300 Person.__init__(self,name,gender,age)301 self.major = major
302 self.dept = dept
303304 def show(self):305 Person.show(self,'')306print(self.major,self.dept)307308 s =Student('james','male',20,'softwart','computer')309 s.show()310'''
311'''
312 結果:
313 james male 20314 softwart computer
315'''
316 # 継承されたクラスコンストラクター:
317'''
318 上記のStrdentクラスの定義から、派生クラスのコンストラクターに加えて、独自の新しい追加を完了することがわかります。
319 major,dept属性の初期化に加えて、基本クラスのPersonコンストラクターを呼び出し、その呼び出しを表示する必要があります。
320 すなわち:人.__init__(self,neme,gender,age)321クラス名Personを介してPersonに直接電話する__init__機能し、必要な4つの機能を提供します
322 基本クラスのコンストラクターは、クラスが継承されたときに自動的に呼び出されることはなく、呼び出しを表示する必要があります
323'''
324325 # 属性メソッドの継承:
326'''
327 基本クラスにインスタンスメソッドがある場合、継承されたクラスにまったく同じインスタンスメソッドを再定義できます。
328 たとえば、Personにはshowメソッドがあり、Studentには同じshowメソッドがあります。混乱することはありません。
329 StudentクラスのショーはPersonのショーをオーバーライドすると呼びます
330 -もちろん、基本クラスのインスタンスメソッドもオーバーライドできません。派生クラスはこの基本クラスのインスタンスメソッドを継承します。
331- 派生クラスは、独自の新しいインスタンスメソッドを追加することもできます
332'''
333'''
334 classPerson:335 className ='Person' #独自のインスタンス属性
336 def __init__(self,name,gender,age):337 self.name = name
338 self.gender = gender
339 self.age = age
340341 def show(self,end='\n'):342print(self.name,self.gender,self.age)343344 @classmethod #クラスメソッドの変更
345 def classClassName(cls):346print(cls.className)347348 @staticmethod #静的メソッド装飾
349 def staticClassName():350print(Person.className)351352 def display(self):353print('display')354355classStudent(Person):356 #className ='Student'357 def __init__(self,name,gender,age,major,dept):358 Person.__init__(self,name,gender,age)359 self.major = major
360 self.dept = dept
361362 def show(self):363 Person.show(self,'')364print(self.major,self.dept)365366 s =Student('A','male',20,'software','computer')367 s.show()368print(Student.className) #学生自身がいない場合は、上位レベル(人)が表示されます
369 Student.classClassName()370 Student.staticClassName()371372 s.display() #インスタンス呼び出し
373'''
374 # 結果の説明:Studentは、Personのインスタンス、静的、およびクラス(属性)メソッドを継承します
375 # 結果:
376'''
377 A male 20378 software computer
379 Person
380 Person
381 Person
382 display
383'''
384385 # ケース:年月日+分と秒
386387 classMyDate:388 __months =[0,31,28,31,30,31,30,31,31,30,31,30,31]389 def __init__(self,y,m,d):390if(y<0):391print("Error:無効な年")392if(m<1 or m>12):393print("Error:無効な月")394if(y%400==0 or y%4==0 and y%100!=0):395 MyDate.__months[2]=29396else:397 MyDate.__months[2]=28398399if d<1 or d>MyDate.__months[m]:400print("Error:無効な日付")401 #日付、月、年がすべて合法になった後、クラスの属性(コンテンツ)を作成します
402 self.year = y
403 self.months = m
404 self.day = d
405 def show(self,end='\n'):406print("%d-%d-%d"%(self.year,self.months,self.day),end = end)407408classMyDateTime(MyDate):409 def __init__(self,y,mo,d,h,mi,s):410 MyDate.__init__(self,y,mo,d)411if(h<0 or h>23 or mi<0 or mi>59 or s<0 or s>59):412print("Error:無効な時間")413 self.hour = h
414 self.minute = mi
415 self.second = s
416417 def show(self):418 MyDate.show(self,'\t')419print("%d:%d:%d"%(self.hour,self.minute,self.second))420421422423424 p =MyDateTime(2018,11,19,21,21,54)425 p.show()426427 #結果:2018-11-1921:21:54
Recommended Posts