Python ScalaのCase Classに相当するものはありますか?)ボイラープレートを作成せずにフィールドに割り当てるコンストラクタを自動生成するようなものです。
これを行う現在の最新の方法(Python 3.7以降)は データクラス を使用します。たとえば、Scala case class Point(x: Int, y: Int)
は次のようになります。
from dataclasses import dataclass
@dataclass(frozen=True)
class Point:
x: int
y: int
frozen=True
パーツはオプションです。変更可能なデータクラスを取得する場合は省略できます。 Scalaのケースクラスと同等にするために含めました。
Python 3.7の前には、 collections.namedtuple
:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
名前付きタプルはタプルなので、不変です。メソッドを追加したい場合は、namedtupleを拡張できます。
class Point(namedtuple('Point', ['x', 'y'])):
def foo():
pass
python3.7
を使用すると、データクラスは@dataclass
として取得されます。公式ドキュメントはこちら- .6。dataclasses —データクラス
from dataclasses import dataclass
@dataclass
class CustomerOrder(object):
order_id: int
customer_id: str
item_name: str
order = CustomerOrder(1, '001', 'Guitar')
print(order)
Python3をpython 3.7にアップグレードしてください。
Macosの場合:brew upgrade python3
上記のscalaのデータクラスは、のようになります)
scala> final case class CustomerOrder(id: Int, customerID: String, itemName: String)
defined class CustomerOrder