Python学習メモ - カスタムクラスを組み込み型に近づける魔法の方法
Python のマジック メソッドは、__XXX__
のような Python で事前定義された関数です。 __XXX__
类型的函数。
使用Python的魔术方法的最大优势在于python提供了简单的方法让对象可以表现得像内置类型一样。
__str__函数
__str__
函数用于处理打印实例本身的时候的输出内容。如果没有覆写该函数,则默认输出一个对象名称和内存地址。
例如:
>>> class Student(object): ... def __init__(self,name): ... self._name = name ... >>> print Student()
输出:<__main__.Student object at 0x0000000002A929E8>
.
那么我们如何让输出的结果可读性更高一点呢?我们可以覆写__str__
函数。例如
>>> class Student(object): ... def __init__(self, name): ... self._name = name ... def __str__(self): ... return "I'm a student, named %s" % self._name ... >>> print Student("Charlie")
输出结果就是:I'm a student, named Charlie
.
我们将str()
函数作用于该对象的时候,其实是调用了该对象的__str__
函数。
_repr_ 函数
__repr__
也是将对象序列化,但是__repr__
更多的是给python编译器看的。__str__
更多的是可读性(readable)。
我们将repr()
函数作用于摸某一个对象的时候,调用的其实就是该函数的__repr__
函数。
与repr()
成对的是eval()
函数。eval()
函数是将序列化后的对象重新转为对象。前提是该对象实现了__repr__
函数。
上面这一段话基于自己的理解,不知道对错。
>>> item = [1,2,3] >>> repr(item) '[1, 2, 3]' >>> other_item = eval(repr(item)) >>> other_item[1] 2
__iter__函数
我们经常对list或者tuple使用for...in...来迭代。那是list继承自Iterable。Iterable实现了__iter__函数。
要想将一个自定义的对象变成一个可迭代的对象,那么必须要实现两个方法:__iter__
和next
.
__iter__
函数返回一个对象。迭代的时候则会不断地调用next
函数拿到下一个值,直到捕获到StopIteration
停止。
廖雪峰老师教程里写的是__next__
方法,不知道为啥。
class Fib(object): def __init__(self): self.a, self.b = 0, 1 def __iter__(self): return self def next(self): self.a, self.b = self.b, self.a + self.b if self.a > 10000: raise StopIteration return self.a for i in Fib(): print i
__getitem__函数
上面通过实现__iter__
函数实现对象的迭代。
那么如何实现对象按下标取出元素呢。
这是通过实现对象的__getitem__
Python のマジック メソッドを使用する最大の利点は、Python がオブジェクトを組み込み型のように動作させる簡単なメソッドを提供することです。
__str__ 関数
__str__
関数は、インスタンス自体を印刷するときに出力コンテンツを処理するために使用されます。この関数がオーバーライドされていない場合、オブジェクト名とメモリ アドレスがデフォルトで出力されます。 🎜例: rrreee🎜 出力: <__main__.Student object at 0x0000000002A929E8>
.🎜 では、出力結果を読みやすくするにはどうすればよいでしょうか? __str__
関数をオーバーライドできます。例:rrreee🎜出力結果は次のようになります: 私は Charlie という名前の学生です
。str()
関数をオブジェクトに適用すると、実際には、オブジェクトの __str__
関数が呼び出されます。 _repr_ 関数
🎜__repr__
もオブジェクトをシリアル化しますが、__repr__
の方が Python コンパイラーが認識するものです。それ。 __str__
は読みやすさに重点を置いています。 🎜 repr()
関数を適用してオブジェクトにアクセスするとき、実際に呼び出すのはその関数の __repr__
関数です。 🎜 repr()
と対になるのは eval()
関数です。 eval()
関数は、シリアル化されたオブジェクトをオブジェクトに変換して戻します。前提条件は、オブジェクトが __repr__
関数を実装していることです。 🎜上記の文章は私自身の理解に基づいており、正しいか間違っているかはわかりません。 rrreee__iter__ 関数
🎜リストやタプルを反復処理するために for...in... をよく使用します。つまり、リストは Iterable から継承されます。 Iterable は __iter__ 関数を実装します。 🎜カスタム オブジェクトを反復可能なオブジェクトに変換したい場合は、__iter__
と next
という 2 つのメソッドを実装する必要があります。🎜 __iter__
関数はオブジェクトを返します。反復する場合、StopIteration
がキャプチャされて停止されるまで、next
関数が継続的に呼び出され、次の値を取得します。 🎜Liao Xuefeng 先生がチュートリアルで __next__
メソッドを書きましたが、理由はわかりません。 rrreee__getitem__ 関数
🎜上記は、__iter__
関数を実装することでオブジェクトの反復を実装します。 🎜それでは、添え字によって要素を抽出するオブジェクトを実装する方法を説明します。 🎜これは、オブジェクトの __getitem__
メソッドを実装することによって行われます。 🎜一つあげましょう

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

hadidb:軽量で高レベルのスケーラブルなPythonデータベースHadIDB(HadIDB)は、Pythonで記述された軽量データベースで、スケーラビリティが高くなっています。 PIPインストールを使用してHADIDBをインストールする:PIPINSTALLHADIDBユーザー管理CREATEユーザー:CREATEUSER()メソッド新しいユーザーを作成します。 Authentication()メソッドは、ユーザーのIDを認証します。 fromhadidb.operationimportuseruser_obj = user( "admin"、 "admin")user_obj。

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

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

MySQLワークベンチは、構成が正しい場合、MariadBに接続できます。最初にコネクタタイプとして「mariadb」を選択します。接続構成では、ホスト、ポート、ユーザー、パスワード、およびデータベースを正しく設定します。接続をテストするときは、ユーザー名とパスワードが正しいかどうか、ポート番号が正しいかどうか、ファイアウォールが接続を許可するかどうか、データベースが存在するかどうか、MariadBサービスが開始されていることを確認してください。高度な使用法では、接続プーリングテクノロジーを使用してパフォーマンスを最適化します。一般的なエラーには、不十分な権限、ネットワーク接続の問題などが含まれます。エラーをデバッグするときは、エラー情報を慎重に分析し、デバッグツールを使用します。ネットワーク構成を最適化すると、パフォーマンスが向上する可能性があります

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

MySQL接続は、次の理由が原因である可能性があります。MySQLサービスは開始されず、ファイアウォールは接続をインターセプトし、ポート番号が間違っています。ユーザー名またはパスワードが間違っています。My.cnfのリスニングアドレスは不適切に構成されています。トラブルシューティング手順には以下が含まれます。 2.ファイアウォール設定を調整して、MySQLがポート3306をリッスンできるようにします。 3.ポート番号が実際のポート番号と一致していることを確認します。 4.ユーザー名とパスワードが正しいかどうかを確認します。 5. my.cnfのバインドアドレス設定が正しいことを確認してください。

データの専門家として、さまざまなソースから大量のデータを処理する必要があります。これは、データ管理と分析に課題をもたらす可能性があります。幸いなことに、AWS GlueとAmazon Athenaの2つのAWSサービスが役立ちます。
