Python equivalent of Scala case class
The current, modern way to do this (as of Python 3.7) is with a data class. For example, the Scala case class Point(x: Int, y: Int)
becomes:
from dataclasses import dataclass
@dataclass(frozen=True)
class Point:
x: int
y: int
The frozen=True
part is optional; you can omit it to get a mutable data class. I've included it for parity with Scala's case class.
Before Python 3.7, there's collections.namedtuple
:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
Namedtuples are immutable, as they are tuples. If you want to add methods, you can extend the namedtuple:
class Point(namedtuple('Point', ['x', 'y'])):
def foo():
pass
If you use python3.7
you get data classes as @dataclass
. Official doc here - 30.6. dataclasses — Data Classes
from dataclasses import dataclass
@dataclass
class CustomerOrder:
order_id: int
customer_id: str
item_name: str
order = CustomerOrder(1, '001', 'Guitar')
print(order)
Make sure to upgrade python3 to python 3.7 or if you use python 3.6 install dataclass from pypi
In macos: brew upgrade python3
While above data class in scala looks like,
scala> final case class CustomerOrder(id: Int, customerID: String, itemName: String)
defined class CustomerOrder