Pythonビデオチュートリアルのコラムでは、3番目のPythonナレッジポイントを紹介しています。
この記事は3番目の記事で、Pythonの基礎を築くための合計4つです。
上記の2つは基本的にPythonでデータ構造を取得します。ここでは、最も重要なクラスについての記事を取り上げます。
7.オブジェクト指向プログラミング
すべてがオブジェクトであり、Pythonは確かにオブジェクト指向プログラミングをサポートしています。クラスとオブジェクトは、オブジェクト指向プログラミングの2つの主要な側面です。クラスは新しいオブジェクトを作成し、オブジェクトはこのクラスのインスタンスです。
オブジェクトはクラス変数を使用できます。オブジェクトまたはクラスに属する変数はドメインと呼ばれます。オブジェクトはクラスに属する関数も使用できます。このような関数はクラスメソッドと呼ばれます。ドメインとメソッドはまとめてクラス属性と呼ばれます。
ドメインには2つのタイプがあります
インスタンスに
属するものはクラス自体に属し
、それぞれインスタンス変数およびクラス変数と呼ばれます。
クラスはキーワードclassを使用して作成され、クラスのフィールドとメソッドはインデントされたブロックにリストされます。
クラスのメソッドには追加の最初のパラメーターが必要ですが、このパラメーターは呼び出されたときに値が割り当てられません。この特別な変数はオブジェクト自体を参照します。慣例により、その名前はJavaの場合と同様にselfです。
クラス内の次の2つの特別なメソッドに注意してください。
init__メソッド:クラスのオブジェクトが作成されたときにこのメソッドを呼び出します。C++のコンストラクターと同等です。つまり、クラスが呼び出されたときに、__ initメソッドが実行されます。
__del__メソッド:このメソッドは、クラスのオブジェクトが破棄されたときに呼び出されます。これは、C ++のデストラクタと同等です。delを使用してオブジェクトを削除すると、__ del__メソッドが呼び出され、__ del__が最後に呼び出されます。
Pythonのすべてのクラスメンバー(データメンバーを含む)はパブリックです。Javaにはプライベートクラスはありません。つまり、誰もが呼び出しクラスを持っています。書き込みは非常に簡単になりますが、誰もがリソースへのアクセスを自由に割り当てることができます。これは確かに悪いことです。 。
ただし、Pythonクラスにはプライベート変数とプライベートメソッドがあります。これは例外です。使用されるデータメンバーの前に二重アンダースコアが付いている場合、それはプライベート変数です。
このクラスをインスタンス化し、アクセスできません。これは多くの人が無視していることです
といった:
class public():
_name = 'protected类型的变量'
__info = '私有类型的变量'
def _f(self):
print("这是一个protected类型的方法") def __f2(self):
print('这是一个私有类型的方法') def get(self):
return(self.__info)
pub = public()# 先打印可以访问的print(pub._name)
pub._f()####结果如下####protected类型的变量
这是一个protected类型的方法# 打印下类 私有变量和私有方法print(pub.__info)
报错:'public' object has no attribute '__info'pub._f2()
报错:pub._f2()复制代码
ただし、プライベートプロパティとメソッドは同じクラスで呼び出すことができます
pub.get()#######'私有类型的变量'复制代码
上記は多くの人が知らないことです。以下では、Personクラスを宣言します。
class Person():
Count = 0
def __init__(self, name, age):
Person.Count += 1
self.name = name
self.__age = age
p = Person("Runsen", 20)
print(p.Count)# 1 说明我实例化,这个__init__方法就要执行print(p.name) #Runsenprint (p.__age)
#AttributeError: Person instance has no attribute '__age'#私有变量访问不了,报错复制代码
8.継承
オブジェクト指向プログラミング(OOP)、完全な英語名:オブジェクト指向プログラミング。オブジェクト指向プログラミングの主な機能の1つは、「継承」です。継承とは、既存のクラスのすべての関数を使用して、元のクラスを書き直すことなくこれらの関数を拡張できる機能を指します。
継承は実際にはこのように理解されています。つまり、私は父親のクラスと息子のクラスを書きました。父親にはお金がありますが、息子にはお金がないので、息子は父親を継承して父親のお金を呼び出すことにしました(変数と方法父のクラス)。
クラスを継承するには、基本的に次の5つのメソッドを使用します。
8.1親属性メソッドを直接呼び出します。
父親にはお金がありますが、息子にはお金がないため、息子は父親のお金を使用します。
class Father():
def __init__(self):
self.money= 1000
def action(self):
print('调用父类的方法')
class Son(Father):
pass
son=Son() # 子类Son 继承父类Father的所有属性和方法son.action() # 调用父类属性输出:调用父类的方法
son.money # 调用父类属性输出:1000复制代码
8,2親クラスの私有財産メソッドを呼び出すことを余儀なくされた;
お父さんは言った、あなたの息子、いつも私のお金を使う、私は私有のお金を隠すことにした。息子はsuper()を試してプライベートマネーを取得しますが、ここではsuper()に注意して、親クラスのプライベートプロパティメソッドを強制的にオーバーライドする必要があります。プライベート変数はsupperに継承できず、プライベートプロパティにアクセスできません。属性メソッドの変数は、息子が私的お金を取得できないことを意味します。
class Father():
__money = 1000 #私有变量是继承不了
def __action(self): # 父类的私有方法
money = 1000
print('调用父类的方法')
class Son(Father):
def action(self):
super()._Father__action()
print(money)
son=Son()
son.action()
调用父类的方法
name 'money' is not defined复制代码
8.3親属性メソッドをオーバーライドします。
息子は突然お金を手に入れ、父親のお金を使わないことにしましたが、自分のお金で親属性メソッドを書き直すことにしました。
class Father():
def __init__(self):
self.money = 0
def action(self):
print('调用父类的方法')
class Son(Father):
def __init__(self):
self.money = 1000
def action(self):
print('子类重写父类的方法')
son=Son() # 子类Son继承父类Father的所有属性和方法son.action() # 子类Son调用自身的action方法而不是父类的action方法son.money # 自己的1000复制代码
8.4親クラスの__init__メソッドの呼び出し
父親が__init__にお金を入れた場合、息子が父親のお金を取得することは可能ですか?それはプライベート変数ではなく、プライベートマネーでもありません。もちろん、取得できます。
まず、スーパーなしで入手できるかどうかを見てみましょう。
class Father():
def __init__(self):
self.money = 1000
class Son(Father):
def __init__(self):
pass
son=Son()
print(son.money)# 报错:'Son' object has no attribute 'money'复制代码
スーパーでさえお金を取るようなものではありません、それはあなたの父と私にとって小さすぎます。
class Father():
def __init__(self):
self.money = 1000
class Son(Father):
def __init__(self):
super().__init__() #也可以用 Father.__init__(self) 这里面的self一定要加上(上面两个相同)
son=Son()
print(son.money)
1000复制代码
8.5親クラスの初期化プロセスでパラメータを継承する
場合によっては、父は初期化プロセスのパラメータであるお金を稼ぎ、お金を使う必要があります。息子は興味があり、ポケットにどれだけのお金が必要かを確認することにしました。
最初にearn_moneyとspend_moneyを書き留めましょう
class Father():
def __init__(self):
self.earn_money=1000
self.spend_money= -500
class Son(Father):
def __init__(self):
super().__init__() #也可以用 Father.__init__(self) 这里面的self一定要加上
def add(self):
return self.earn_money+self.spend_money
son=Son()
print(son.add())500复制代码
息子は父親に十分なお金がないことに気づいたので、密かにお金を引き継いだ。
class Father():
def __init__(self,a,b):
self.earn_money = a
self.spend_money= b def add(self):
return self.a + self.b
#调用父类初始化参数a,b并增加额外参数cclass Son(Father):
def __init__(self,a,b,c=1000): # c固定值
Father.__init__(self,a,b)
self.son_money = c
def add(self):
return self.earn_money+self.spend_money + self.son_money
son=Son(1000,-500) # 所以c可以不用显示表达出来print(son.add()) # 调用子类add函数1500复制代码
上記は基本的にPythonクラスの継承、親クラスの属性とメソッドを呼び出す基本的な内容をカバーしています。理解を深めるためにいくつかのケースを自分で書くことができます。
9.入力/出力
プログラムとユーザー間の対話には、主にコンソールとファイルを含む入力/出力の使用が必要です。コンソールには、入力と印刷を使用できます。input(xxx)xxxを入力し、ユーザーの入力を読み取って戻ります。
In [1]: input()1Out[1]: '1'复制代码
10.ファイルの入出力
fileclassを使用してファイルを開き、file read、readline、およびwriteを使用してファイルを適切に読み書きできます。ファイルの読み取りと書き込みの機能は、ファイルを開くときに使用されるモード、コモンモードによって異なります。
読み取りモード( "r")、
書き込みモード( "w")、
追加モード( "a")の
ファイル操作では、ファイルを閉じるためにcloseメソッドを呼び出す必要があります。openで使用する場合、スレーブは必要ありません。
そしてr +、w +、a +
r:
r +での読み取りのみを意味します:
wへの
読み取りと書き込みの両方:w +への書き込みのみを意味します:読み取りと書き込みの両方です
が、r +とw +は、txtの元の内容を空にしないという点で異なります。以下はそれらの比較です。とにかく、a +を使用してみてください。基本的に、問題はありません。
説明r + w + a +
ファイルを作成するためのファイルが存在しない場合の現在のファイル作成スロー
オープン空予約済み元のファイルの予約済みコンテンツ
00ファイルテールの初期位置
デフォルトファイルの終わりにジャンプ書き込み位置の書き込み位置マーク
補足例バーの:
test = '''\
This is a program about file I/O.
Author: Runsen
Date: 2020/3/31
'''f = open("test.txt", "w")
f.write(test)
f.close()
f = open("test.txt") #默认rwhile True:
line = f.readline() if len(line) == 0:
break
print(line)
f.close()######This is a program about file I/O.
Author: Runsen
Date: 2020/3/31复制代码
11.メモリ
メモリ、誰もが知っているべきではありません。Pythonはpickleと呼ばれる標準モジュールを提供します。これを使用してPythonオブジェクトをファイルに保存し、完全に取り出すことができます。これはオブジェクトの永続ストレージと呼ばれます。同じ機能を持つcPickleと呼ばれる別のモジュールがあります。 Pickleは、Pickleよりも高速(約1000倍高速)であるCで記述されていることを除いて、まったく同じです。
import pickle
datafile = "data.data"mylist = ["Runsen", "is", "20"]
f = open("test.txt", "wb+")
pickle.dump(mylist, f)
f.close()del mylist
f = open(datafile,'rb+')
mylist = pickle.load(f)
print(mylist)#["Runsen", "is", "20"]复制代码
12.異常
プログラムに異常が発生すると異常が発生します。
試してみてください…Pythonで使用できる場合を除きます。
try: print (1/0)except ZeropisionError as e:
print(e)except:
print( "error or exception occurred.")#integer pision or modulo by zero复制代码
この記事は、php中国のウェブサイトpythonビデオチュートリアルコラムから来ています:https://www.php.cn/course/list/30.html