ホームページ バックエンド開発 Python チュートリアル Python でオブジェクト指向プログラミングを行う方法

Python でオブジェクト指向プログラミングを行う方法

Jul 17, 2017 am 09:42 AM
python プログラミング のために

  1. Python はインタープリタ言語ですが、オブジェクト指向であり、オブジェクト プログラミングを実行できます。 Python でオブジェクト プログラミングを行う方法を学びましょう。

  2. 1. クラスを定義する方法

  3. Python でオブジェクト指向プログラミングを行う前に、まずクラス、クラス オブジェクト、インスタンス オブジェクト、属性、関数、メソッドといういくつかの用語を理解しましょう。

  4. 1. オブジェクト指向とは

オブジェクト指向 (oop) は、世界のすべてをオブジェクトに抽象化することができ、すべてはオブジェクトで構成されます。プログラミングに応用され、オブジェクトをプログラムの基本単位として使用するプログラム開発方法です。

2. オブジェクト指向とプロセス指向の違い

プロセス指向の核心は、プロセスを使用してプログラムを設計するという言葉です。 -指向の手法は、組み立てラインの設計は機械的な考え方に似ています

長所: 複雑な問題が単純化され、合理化されます

短所: スケーラビリティが低い

主なアプリケーションシナリオには、Linux カーネル、git、および http サービスが含まれます

オブジェクト-プログラミングの核心は、機能 (変数) とスキル (関数) の組み合わせであるオブジェクトです。

利点: プログラムの拡張性が低いという問題を解決します

欠点: 制御性が低く、最終結果を予測できません

主なアプリケーションシナリオは、ニーズが頻繁に変化するソフトウェア、つまりユーザーと頻繁に対話するソフトウェアです

すべきこと注意: オブジェクト指向プログラミングはすべての問題を解決するわけではなく、スケーラビリティを解決するためにのみ使用されます。もちろん、今日のインターネット ソフトウェアでは、スケーラビリティが最も重要です

3. オブジェクトとクラスの概念

Python では、オブジェクトはすべて独自の属性、つまり特性を持つ必要があります。関数、つまりメソッド

Pythonでは、特徴は変数で表現され、関数は関数で表現されるので、オブジェクトは変数と関数の組み合わせです

そして、さまざまなオブジェクトから同じ特性、同じ機能を持つオブジェクトが抽出されますはクラスなので、クラスは一連のオブジェクトの共通の特性と機能の組み合わせです

クラスを定義しましょう。メソッドは関数の定義に似ています:

#定义一个中国人的类class Chinese:#共同的特征country='China'#共同的技能def talk(self):print('is talking Chinese')def eat(self):print('is eating Chinese food')
ログイン後にコピー

このようにして、次のようになります。注: 1. クラスを定義するには class キーワードを使用します

2. クラス名の最初の文字は通常大文字で、関数定義とは異なり、コロンの前に括弧は必要ありません
3. 関数とは異なり、クラスは定義フェーズでクラス内のコードを実行します

4. クラスには 2 つの属性があります。共通の特性はデータ属性と呼ばれ、共通の関数は関数属性と呼ばれます

このクラスのオブジェクト?インスタンス化:

p1=Chinese()
p2=Chinese()
ログイン後にコピー

現実世界で何が起こっても、プログラムでは確かに最初にクラスがあり、次にオブジェクトがあると結論付けることができます

インスタンス化を通じて 2 つのオブジェクトを取得しました。はい、しかし、問題は、得られた 2 つのオブジェクトは同じ特性と機能を持っているということですが、すべてのオブジェクトが異なるという概念はまったく矛盾しています。実際、クラスを定義したときに、 __init__() 関数を定義するのを忘れていました。正しい定義方法は次のようになります:

#定义一个中国人的类class Chinese:#共同的特征country='China'#初始化def __init__(self,name,age):
        self.name=name  #每个对象都有自己的名字self.age=age    #每个对象都有自己的年龄#共同的技能def talk(self):print('is talking Chinese')def eat(self):print('is eating Chinese food')#实例化的方式产生一个对象p1=Chinese('zhang',18)
ログイン後にコピー
クラス名と括弧はインスタンス化を意味し、インスタンス化は自動的に __init__ をトリガーします。関数が実行され、それを使用して独自の特性をカスタマイズできます。各オブジェクトごとに

__init__ 関数を定義したときは、括弧内に 3 つのパラメーターがありましたが、呼び出しをインスタンス化するときは 2 つの値だけを渡しました。なぜエラーを報告しないのでしょうか。これは、self の機能は、オブジェクトをインスタンス化するときに、オブジェクト自体を __init__ 関数の最初のパラメータに自動的に渡すことであるためです。もちろん、self は単なる名前です。それを理解するために。

注意。この自動値転送メカニズムは、インスタンス化に加えて、クラス名

#引用类的数据属性print(Chinese.country)  #China#引用类的函数属性# Chinese.talk()#TypeError: talk() missing 1 required positional argument: 'self'print(Chinese.talk) #<function Chinese.talk at 0x000001BC5F13D1E0>Chinese.talk('self')    #is talking Chinese#增加属性Chinese.color='yellow'#删除属性del Chinese.color
ログイン後にコピー
の属性参照の機能も持っています。参照する場合、自動的に値が転送されることはありません

変数を定義したり、関数を定義したりすると、メモリ内にメモリ空間が開かれ、定義された変数(データ属性)も存在します。クラス内の関数 (関数属性) には、.__dict__ メソッドを通じて表示できる名前空間もあります

p1=Chinese('zhang',18)print(Chinese.__dict__)#{'__module__': '__main__', 'country': 'China', '__init__': <function Chinese.__# init__ at 0x000002187F35D158>, 'talk': <function Chinese.talk at 0x000002187F35D1E0>, # 'eat': <function Chinese.eat at 0x000002187F35D268>, '__# dict__': <attribute &#39;__dict__&#39; of &#39;Chinese&#39; objects>,#  '__weakref__': <attribute &#39;__weakref__&#39; of &#39;Chinese&#39; objects>, '__doc__': None}print(p1.__dict__)#{'name': 'zhang', 'age': 18}
ログイン後にコピー
上記のコードに示された結果から、インスタンス化されたオブジェクトの名前空間のみを表示することがわかります。他のオブジェクトに共通する属性を見つけたい場合は、クラスの名前空間でそれらを探す必要があります。もちろん、オブジェクトの名前空間には関数属性がありません。クラス内で探す必要がありますが、別のオブジェクトによって指定された関数、それは関数ですか

p1=Chinese('zhang',18)
p2=Chinese('li',19)print(Chinese.talk)#<function Chinese.talk at 0x000001B8A5B7D1E0>print(p1.talk)     #<bound method Chinese.talk of <__main__.Chinese object at 0x000001B8A5B7BD68>>print(p2.talk)     #<bound method Chinese.talk of <__main__.Chinese object at 0x000001B8A5B7BDA0>>
ログイン後にコピー

可以看到,并不是,他们的内存地址都不一样。而且注意bound method,是绑定方法

对象本身只有数据属性,但是Python的class机制将类的函数也绑定到对象上,称为对象的方法,或者叫绑定方法。绑定方法唯一绑定一个对象,同一个类的方法绑定到不同的对象上,属于不同的方法。我们可以验证一下:

当用到这个函数时:类调用的是函数属性,既然是函数,就是函数名加括号,有参数传参数

而对象用到这个函数时,对象没有函数属性,他是绑定方法,绑定方法怎么用呢,也是直接加括号,但不同的是,绑定方法会默认把对象自己作为第一个参数

class Chinese:
    country='China'def __init__(self,name,age):
        self.name=name  
        self.age=age    def talk(self):print('%s is talking Chinese'%self.name)def eat(self):print('is eating Chinese food')

p1=Chinese('zhang',18)
p2=Chinese('li',19)
Chinese.talk(p1)    #zhang is talking Chinesep1.talk()           #zhang is talking Chinese
ログイン後にコピー

只要是绑定方法,就会自动传值!其实我们以前就接触过这个,在python3中,类型就是类。数据类型如list,tuple,set,dict这些,实际上也都是类,我们以前用的方法如l1.append(3),还可以这样写:l1.append(l1,3)

未完待续。。。

以上がPython でオブジェクト指向プログラミングを行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Sublime Code Pythonを実行する方法 Sublime Code Pythonを実行する方法 Apr 16, 2025 am 08:48 AM

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

vscodeでコードを書く場所 vscodeでコードを書く場所 Apr 15, 2025 pm 09:54 PM

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

メモ帳でPythonを実行する方法 メモ帳でPythonを実行する方法 Apr 16, 2025 pm 07:33 PM

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。

See all articles