この記事では、Python 3.7 の新機能であるデータクラス デコレーターに関する関連情報を、サンプル コードを通じて詳細に紹介します。これは、学習や仕事に必要な学習に役立ちます。一緒に勉強しましょう。
はじめに
Python 3.7 はこの夏にリリースされます。Python 3.7 には多くの新機能が追加されます:
さまざまな文字セットの改善
アノテーションの遅延評価
-
そしてデータクラスのサポート
最もエキサイティングな新機能の 1 つは、データクラス デコレータです。
データクラスとは
ほとんどの Python 開発者は、次のような多くのクラスを作成しました:
class MyClass: def __init__(self, var_a, var_b): self.var_a = var_a self.var_b = var_b
dataclass は、単純なケース (__init__ など) のメソッドを自動的に生成できます これらのパラメーターを受け入れて割り当てます前の小さな例は次のように書き換えることができます:
@dataclass class MyClass: var_a: str var_b: str
それでは、例を通してその使用方法を見てみましょう
Star Wars API
リクエストを使用できます Star Wars からリソースを取得しますAPI:
response = requests.get('https://swapi.co/api/films/1/') dictionary = response.json()
辞書 (簡略化) の結果を見てみましょう:
{ 'characters': ['https://swapi.co/api/people/1/',… ], 'created': '2014-12-10T14:23:31.880000Z', 'director': 'George Lucas', 'edited': '2015-04-11T09:46:52.774897Z', 'episode_id': 4, 'opening_crawl': 'It is a period of civil war.\r\n … ', 'planets': ['https://swapi.co/api/planets/2/', … ], 'producer': 'Gary Kurtz, Rick McCallum', 'release_date': '1977-05-25', 'species': ['https://swapi.co/api/species/5/',…], 'starships': ['https://swapi.co/api/starships/2/',…], 'title': 'A New Hope', 'url': 'https://swapi.co/api/films/1/', 'vehicles': ['https://swapi.co/api/vehicles/4/',…]
API を適切にカプセル化するには、ユーザーが使用できるオブジェクトを作成する必要があります。アプリケーションで使用できるため、Python 3.6 では、/films/endpoint へのリクエスト応答を含むオブジェクトを定義します:
class StarWarsMovie: def __init__(self, title: str, episode_id: int, opening_crawl: str, director: str, producer: str, release_date: datetime, characters: List[str], planets: List[str], starships: List[str], vehicles: List[str], species: List[str], created: datetime, edited: datetime, url: str ): self.title = title self.episode_id = episode_id self.opening_crawl= opening_crawl self.director = director self.producer = producer self.release_date = release_date self.characters = characters self.planets = planets self.starships = starships self.vehicles = vehicles self.species = species self.created = created self.edited = edited self.url = url if type(self.release_date) is str: self.release_date = dateutil.parser.parse(self.release_date) if type(self.created) is str: self.created = dateutil.parser.parse(self.created) if type(self.edited) is str: self.edited = dateutil.parser.parse(self.edited)
注意深い読者の方は、重複したコードがあることに気づいたかもしれません。
これはデータクラス デコレータを使用する典型的なケースです。少し検証して、主にデータを保持するために使用されるクラスを作成する必要があるため、何を変更する必要があるかを見てみましょう。
まず、データ クラス デコレーターのオプションを指定しない場合、生成されるメソッドは __init__、__eq__、および __repr__ です (__repr__ を定義しているが、_ _str__ を定義していない場合)。 (データ クラスだけでなく) __repr__ を返す出力 __str__ メソッドを実装します。したがって、コードを次のように変更して 4 つの dunder メソッドを実装するだけです:
@dataclass class StarWarsMovie: title: str episode_id: int opening_crawl: str director: str producer: str release_date: datetime characters: List[str] planets: List[str] starships: List[str] vehicles: List[str] species: List[str] created: datetime edited: datetime url: str
データ クラス デコレータが生成する対応するメソッドを追加できるようにするために、__init__ メソッドを削除しました。ただし、その過程で一部の機能が失われています。Python 3.6 コンストラクターはすべての値を定義するだけでなく、日付の解析も試みます。データ クラスでこれを行うにはどうすればよいでしょうか?
__init__ をオーバーライドしたい場合は、データ クラスの利点が失われるため、追加の機能を処理したい場合は、新しいダンダー メソッド __post_init__ を使用できます。ラッパー クラスの __post_init__ メソッドが何であるかを見てみましょう。 :
りーそれです! データ クラス デコレータを使用すると、コードの 3 分の 2 でクラスを実装できます。
さらに良い点
データクラスは、デコレータのオプションを使用することでユースケースに合わせてさらにカスタマイズできます。デフォルトのオプションは次のとおりです:
def __post_init__(self): if type(self.release_date) is str: self.release_date = dateutil.parser.parse(self.release_date) if type(self.created) is str: self.created = dateutil.parser.parse(self.created) if type(self.edited) is str: self.edited = dateutil.parser.parse(self.edited)
init は __init__ ダンダーを生成するかどうかを決定しますMethod
repr は __repr__ dunder メソッドを生成するかどうかを決定します
eq は __eq__ dunder メソッドに対して同じことを行い、等価性チェック (your_class_instance == another_instance) の動作を決定します
order は実際には 4 つを作成しますdunder メソッド。これらは、より小さいか、より大きいか、あるいはその両方のすべてのチェックの動作を決定します。true に設定すると、オブジェクトのリストを並べ替えることができます。
最後の 2 つのオプションは、オブジェクトをハッシュできるかどうかを決定します。これは、クラスのオブジェクトを辞書キーとして使用する場合に必要です。
詳細については、PEP 557 -- データクラス
以上がPython 3.7の新機能であるデータクラスデコレータの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonlistscanstoreanydatatype,arraymodulearraysstoreonetype,andNumPyarraysarefornumericalcomputations.1)Listsareversatilebutlessmemory-efficient.2)Arraymodulearraysarememory-efficientforhomogeneousdata.3)NumPyarraysareoptimizedforperformanceinscient

heouttemptemptostoreavure ofthewrongdatatypeinapythonarray、yure counteractypeerror.thisduetothearraymodule'sstricttypeeencultionyを使用します

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

theScriptisrunningwithwrongthonversionduetorectRectDefaultEntertersettings.tofixthis:1)CheckthedededefaultHaulthonsionsingpython - versionorpython3-- version.2)usevirtualenvironmentsbycreatingonewiththon3.9-mvenvmyenv、andverixe

PythonArraysSupportVariousoperations:1)SlicingExtractsSubsets、2)Appending/ExtendingAdddesements、3)inSertingSelementSatspecificpositions、4)remvingingDeletesements、5)sorting/verversingsorder、and6)listenionsionsionsionsionscreatenewlistsebasedexistin

numpyarraysAressertialentionsionceivationsefirication-efficientnumericalcomputations andDatamanipulation.theyarecrucialindatascience、mashineelearning、物理学、エンジニアリング、および促進可能性への適用性、scaledatiencyを効率的に、forexample、infinancialanalyyy

UseanArray.ArrayOverAlistinPythonは、Performance-criticalCode.1)homogeneousdata:araysavememorywithpedelements.2)Performance-criticalcode:Araysofterbetterbetterfornumerumerumericaleperations.3)interf

いいえ、notallistoperationSaresuptedbyarrays、andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorintorintorinsertizizing、whosimpactsporformance.2)リスト


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









