web-dev-qa-db-ja.com

Python Scalaと同等のケースクラス

Python ScalaのCase Classに相当するものはありますか?)ボイラープレートを作成せずにフィールドに割り当てるコンストラクタを自動生成するようなものです。

11
james.bondu

これを行う現在の最新の方法(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
18
Brian McCutchon

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
4
prayagupd