ホームページ バックエンド開発 Python チュートリアル Python のオブジェクト指向とクラスの基本構文に関する簡単な説明

Python のオブジェクト指向とクラスの基本構文に関する簡単な説明

Jun 16, 2016 am 08:47 AM
python オブジェクト指向

Python でオブジェクト指向プログラミングを書きたいと知ったとき、私はためらって落ち着きませんでした。この穴をどうやって登ればいいのかと考えていました。 Pythonはオブジェクト指向の内容が多いので、しっかり解説したい場合は、前回の内容をオブジェクト指向の考え方で学び直すのがベストです。この穴はとても大きいので、迷った末に重要な内容だけを取り上げましょう。足りない内容は皆で補うしかありません。

規約として、私が使用しているバージョンは python2.7 であり、バージョンごとに違いがある可能性があります。

それでは、始める前に、質問について考えてコードを見てみましょう:

a の値を作成するだけで、自分が書いていないメソッドを使用できるのはなぜですか?

友人の中には、「この時点では a は文字列オブジェクトなので、当然、文字列メソッドを使用できます。これらのメソッドは Python によって事前に記述されています。」と言う人もいるかもしれません。

さて、質問を変えましょう。なぜ Python はそれが文字列オブジェクトであることを認識するのでしょうか?

この問題について詳しく説明する前に、一文を思い出してください。Python のすべてはオブジェクトであり、オブジェクトはクラスによって作成されます。

では、クラスとは何でしょうか?ここで例を示します。

ある日、道を歩いていると、突然目の前に敵が現れました。この時、私は彼を殴りたかったが、力が相互作用し、彼を殴ると拳が痛くなるだろう。おい、このとき道端に石を見つけたんだ、大きさも形もちょうどよかった、警察官がどう思ったかはともかく、これはいい選択だった。それから私は石を拾い上げ、良い子には真似できないような行動を敵に対して行いました。それから私は自分の功績と名声を隠し、これをやめて家に帰りました。

この過程で、なぜそれが石であることがわかるのでしょうか?

見た目が石だから!

なぜ石が人に当たる可能性があることがわかっているのでしょうか?

石が硬いから!

なぜ岩が硬いことがわかるのでしょうか?

だって…そうですね…私が小さかった頃、父が私にこう言ったんです。

この時点で結論を導き出すことができます。つまり、私たちはその物が何であるか、そしてそれがどのような機能を持っているかを知っています。なぜなら、私たちはすでにその物の概念を頭の中に持っているからです。この概念は長老から知られている場合もあれば、さまざまな実験を経て自分でまとめたものである場合もあります。 「ブラックホール」についての私たちの理解と同様に、それらは科学者によるさまざまな研究から導き出されています。

誰かを石で殴る例をコードに実装する方法:

class Stone(object):  # 我创建一个叫Stone的类

  def attack(self):
    print '把头伸过来,我给你加个buff'

a = Stone()  # 我用类创建了一个对象,也称为类的实例化
a.attack()   # 我使用这个对象的方法
ログイン後にコピー

素晴らしい、それが私たちが必要としていたものです。

他のオブジェクトを作成する場合:

明らかに、Python は攻撃方法を用意していないため、使用できません。

いわゆるクラスは単なる抽象定義ですが、インスタンスは具体的なオブジェクトです。それらの違いは私の心の中の石と手の中の石のようなもので、後者だけが現実です。もちろん、ここでは理想論などについて話さないでください。

これを見ると、クラスとオブジェクトの関係がより明確になるはずです。一部の学生は、「Python のすべてのクラスは事前に作成されています。Python にクラスを自動的に生成させ、特定のタイミングでこれらのクラスを使用させる方法はありますか?」と尋ねるかもしれません。おめでとうございます、クラスメート、あなたは人工知能の限界に達したかもしれません。それが実現できれば、それは私たちの学習能力と同じになるのではないでしょうか。まあ、これは私の単なるアイデアですが、実際の人工知能を実現する方法はまだわかりません。しかし、プログラマーとしては、人工知能をプログラミングできるようになるかもしれません。さあ、生涯の追求です。

クラスとインスタンス化とは何かについて説明した後、クラスの基本的な構文を見てみましょう。

まず、classは関数を定義するdefと同様にクラスを定義するためのキーワードです。

以下はクラス名であり、同様に、Python の組み込みキーワードと競合することはできません。さらに、Python の組み込み型 (str や int などの名前) は避けることをお勧めします。標準的な命名は、「キャメルケース命名方法」に従う必要があります。例: MyClass ここでの命名では、各単語の最初の文字が大文字になります。

次に括弧があり、内部のパラメータは継承用であり、通常はオブジェクトから継承され、新しいスタイル クラスを示します。また、古典的な書き方である括弧なしで書かれているのを見たことがあるかもしれません。

示例:

class NewClass(object):
  pass

class OldClass:
  pass

New = NewClass()  # 创建一个新式类的实例
Old = OldClass()  # 创建一个经典类的实例
ログイン後にコピー

这就是类的基本语法,当然这样还是不够的,但是在更深入之前,我想先讲一个新旧式类的差别。

在这里,我们先打印一下两个变量的类型:

print type(New)
print type(Old)
ログイン後にコピー

可以看下两者的输出是不同的。

在早于python2.2的版本时,只有经典类这一种写法,当时,类和类型没有合并。

类是类对象,实例是实例对象,这两个对象之间没有任何关系。

这句话是什么意思?看代码:

print type(OldClass)
print type(Old)
ログイン後にコピー

我们可以看见其输出很含糊,经典类属于类对象,无论是哪个类,都统一为“类”类型,实例属于实例类型,却不知道其是由哪个类创建的,所以的实例都统一为“实例”类型。也就是说当时的类型用 classobj 和 instance 代表了所以的类和实例,无论你是哪个类,又或是哪个类创建的实例。

这样的信息实在太少,而类和类型之间非常混乱。为了解决这种情况,在 python2.2 中引入了新式类,并进行了类和类型的同统一。

print type(NewClass)
print type(New)
ログイン後にコピー

类的类型是 type?type 返回的对象还能像类一样创新新对象?

总结的来说:在新式类中,所以的类对象都是 type 的实例。而不同的类对象有能创建出其对应的实例。

class NewClass(object):
  def __init__(self, val):
    self.val = val

New = NewClass(123)  
b = type(New)(321) # 对实例来说type返回的是类对象,我又可以用类对象来和创建新的实例
print b.val
ログイン後にコピー

构造器方法

一般可以理解类中的函数就是方法,而方法分为:实例方法,只有实例化后才能调用的,其第一个参数一般为 self,代表实例本身;类方法,其第一个参数为 cls,代表类本身;还有静态方法,就是个普通函数,没有要求参数。

1. __init__(self [,arg1,....]):

当类被调用进行实例化的时候,python会自动调用类里面的构造函数(如果有的话),在构造函数中,可以进行各种初始化的操作,最常见的就是上面的进行实例的属性的创建。

python 在示例化的时候,会检查其实行了 __init__ 方法了没有,如果没有则不对实例进行任何操作,然后返回对象。如果实行了这个方法,则自动调用这个方法,并自动将 self 传进行,也就是说我们在实例化进行传参的时候,将不用理会 self,直接传给后面的参数。

讲到属性,就必须要提一下什么是属性。属性这个对象其实更像一个变量,大多数对象都可以有属性(不包括python的内置类型),例如函数。

def Test():
  pass

Test.a = 123
print Test.a
ログイン後にコピー

因为函数也是一个对象。

属性在类中,就是一个变量,例如:

class NewClass(object):
  a = 123

print NewClass.a
ログイン後にコピー

当然,因为 python 的特性,我们可以在运作中为某个对象添加属性,而不用一开始就在类中写定。

注意,这个方法应该返回 None,也就是说我们一般不用 return 任何对象,让它默认返回就行了。

2. __new__(cls [,arg1,....]):

这也是一个构造器方法,它是一个类方法,一般在对 python 的不可变数据类型进行继承扩展的时候用的比较多。

某处拿来的代码示例:

class RoundFloat(float):
  def __new__(cls, val):
    return super(RoundFloat, cls).__new__(cls, round(val, 2))

a = RoundFloat(3.14159)
print a
ログイン後にコピー

解构器方法

__del__(self [,arg1,....])

这个方法将会在对象所以的引用被清除后才执行,例如:

class Test(object):

  def __del__(self):
    print '我被干掉了,兄弟们为我报仇!'

a = Test() # 创建了一个对象
b = a  # b又引用了a
c = b  # c又引用了b,现在 a 所指向的对象有3次引用,相当有三条命
del a  # 干掉一条命
del b  # 又干掉
del c  # 听说你有3条命?全部干掉!
ログイン後にコピー

注意,这里只输出了一次,也就是说到了最后才删除完毕。这里要注意一下几点:

1. del の呼び出しはオブジェクトの削除が完了したことを意味するものではなく、参照が減少するだけです。

2. 循環参照またはインスタンスへの参照が残るその他の理由がある場合、オブジェクトの __del__() が実行されない可能性があります。

3. __del__() でキャッチされなかった例外は無視されます (__del__() で使用される一部の変数が削除されている可能性があるため)。 __del__() では、インスタンスと関係のないことは行わないでください。

4. 通常、この方法には一定のリスクが伴うため、実装する必要はありません。

5. __del__ を定義し、インスタンスがループの一部である場合、ガベージ コレクターはループを終了しません。明示的に del を自分で呼び出す必要があります。

6. 親クラスを継承し、その親クラスにデストラクターがある場合は、それを忘れずに呼び出してください。そうしないと、親クラスの一部のクリーニング メソッドが呼び出されず、次の予期しないエラーが発生する可能性があります。

Python のオブジェクト指向とクラスの基本構文について簡単に説明した上記の記事は、エディターが共有したすべての内容です。参考にしていただければ幸いです。また、皆様にも Script Home をサポートしていただければ幸いです。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

mysqlは支払う必要がありますか mysqlは支払う必要がありますか Apr 08, 2025 pm 05:36 PM

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

インストール後にMySQLの使用方法 インストール後にMySQLの使用方法 Apr 08, 2025 am 11:48 AM

この記事では、MySQLデータベースの操作を紹介します。まず、MySQLWorkBenchやコマンドラインクライアントなど、MySQLクライアントをインストールする必要があります。 1. mysql-uroot-pコマンドを使用してサーバーに接続し、ルートアカウントパスワードでログインします。 2。CreatedAtaBaseを使用してデータベースを作成し、データベースを選択します。 3. createTableを使用してテーブルを作成し、フィールドとデータ型を定義します。 4. INSERTINTOを使用してデータを挿入し、データをクエリし、更新することでデータを更新し、削除してデータを削除します。これらの手順を習得することによってのみ、一般的な問題に対処することを学び、データベースのパフォーマンスを最適化することでMySQLを効率的に使用できます。

MySQLダウンロードファイルが破損しており、インストールできません。修復ソリューション MySQLダウンロードファイルが破損しており、インストールできません。修復ソリューション Apr 08, 2025 am 11:21 AM

mysqlダウンロードファイルは破損していますが、どうすればよいですか?残念ながら、MySQLをダウンロードすると、ファイルの破損に遭遇できます。最近は本当に簡単ではありません!この記事では、誰もが迂回を避けることができるように、この問題を解決する方法について説明します。それを読んだ後、損傷したMySQLインストールパッケージを修復するだけでなく、将来の行き詰まりを避けるために、ダウンロードとインストールプロセスをより深く理解することもできます。最初に、ファイルのダウンロードが破損した理由について話しましょう。これには多くの理由があります。ネットワークの問題は犯人です。ダウンロードプロセスの中断とネットワーク内の不安定性は、ファイル腐敗につながる可能性があります。ダウンロードソース自体にも問題があります。サーバーファイル自体が壊れており、もちろんダウンロードすると壊れています。さらに、いくつかのウイルス対策ソフトウェアの過度の「情熱的な」スキャンもファイルの破損を引き起こす可能性があります。診断問題:ファイルが本当に破損しているかどうかを判断します

MySQLはダウンロード後にインストールできません MySQLはダウンロード後にインストールできません Apr 08, 2025 am 11:24 AM

MySQLのインストール障害の主な理由は次のとおりです。1。許可の問題、管理者として実行するか、SUDOコマンドを使用する必要があります。 2。依存関係が欠落しており、関連する開発パッケージをインストールする必要があります。 3.ポート競合では、ポート3306を占めるプログラムを閉じるか、構成ファイルを変更する必要があります。 4.インストールパッケージが破損しているため、整合性をダウンロードして検証する必要があります。 5.環境変数は誤って構成されており、環境変数はオペレーティングシステムに従って正しく構成する必要があります。これらの問題を解決し、各ステップを慎重に確認して、MySQLを正常にインストールします。

MySQLインストール後に開始できないサービスのソリューション MySQLインストール後に開始できないサービスのソリューション Apr 08, 2025 am 11:18 AM

MySQLは開始を拒否しましたか?パニックにならないでください、チェックしてみましょう!多くの友人は、MySQLのインストール後にサービスを開始できないことを発見し、彼らはとても不安でした!心配しないでください、この記事はあなたがそれを落ち着いて対処し、その背後にある首謀者を見つけるためにあなたを連れて行きます!それを読んだ後、あなたはこの問題を解決するだけでなく、MySQLサービスの理解と問題のトラブルシューティングのためのあなたのアイデアを改善し、より強力なデータベース管理者になることができます! MySQLサービスは開始に失敗し、単純な構成エラーから複雑なシステムの問題に至るまで、多くの理由があります。最も一般的な側面から始めましょう。基本知識:サービススタートアッププロセスMYSQLサービススタートアップの簡単な説明。簡単に言えば、オペレーティングシステムはMySQL関連のファイルをロードし、MySQLデーモンを起動します。これには構成が含まれます

MySQLインストール後にデータベースのパフォーマンスを最適化する方法 MySQLインストール後にデータベースのパフォーマンスを最適化する方法 Apr 08, 2025 am 11:36 AM

MySQLパフォーマンスの最適化は、インストール構成、インデックス作成、クエリの最適化、監視、チューニングの3つの側面から開始する必要があります。 1。インストール後、INNODB_BUFFER_POOL_SIZEパラメーターやclose query_cache_sizeなど、サーバーの構成に従ってmy.cnfファイルを調整する必要があります。 2。過度のインデックスを回避するための適切なインデックスを作成し、説明コマンドを使用して実行計画を分析するなど、クエリステートメントを最適化します。 3. MySQL独自の監視ツール(ShowProcessList、ShowStatus)を使用して、データベースの健康を監視し、定期的にデータベースをバックアップして整理します。これらの手順を継続的に最適化することによってのみ、MySQLデータベースのパフォーマンスを改善できます。

高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? 高負荷アプリケーションのMySQLパフォーマンスを最適化する方法は? Apr 08, 2025 pm 06:03 PM

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

mysqlはインターネットが必要ですか? mysqlはインターネットが必要ですか? Apr 08, 2025 pm 02:18 PM

MySQLは、基本的なデータストレージと管理のためにネットワーク接続なしで実行できます。ただし、他のシステムとのやり取り、リモートアクセス、または複製やクラスタリングなどの高度な機能を使用するには、ネットワーク接続が必要です。さらに、セキュリティ対策(ファイアウォールなど)、パフォーマンスの最適化(適切なネットワーク接続を選択)、およびデータバックアップは、インターネットに接続するために重要です。

See all articles