是否有任何Python相当于Scala的Case Class?就像自动生成构造函数一样,无需写出样板文件即可分配给字段.
Bri*_*hon 22
目前,现代的方法(从Python 3.7开始)是一个数据类.例如,Scala case class Point(x: Int, y: Int)变为:
from dataclasses import dataclass
@dataclass(frozen=True)
class Point:
x: int
y: int
Run Code Online (Sandbox Code Playgroud)
该frozen=True部分是可选的; 你可以省略它来获得一个可变数据类.我把它包含在Scala的案例类中.
在Python 3.7之前,有collections.namedtuple:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
Run Code Online (Sandbox Code Playgroud)
Namedtuples是不可变的,因为它们是元组.如果要添加方法,可以扩展namedtuple:
class Point(namedtuple('Point', ['x', 'y'])):
def foo():
pass
Run Code Online (Sandbox Code Playgroud)
如果使用,则将python3.7数据类作为@dataclass。官方文档在这里-30.6。数据类-数据类
from dataclasses import dataclass
@dataclass
class CustomerOrder(object):
order_id: int
customer_id: str
item_name: str
order = CustomerOrder(1, '001', 'Guitar')
print(order)
Run Code Online (Sandbox Code Playgroud)
确保将python3升级到python 3.7。
在macOS中: brew upgrade python3
虽然以上scala中的数据类看起来像,
scala> final case class CustomerOrder(id: Int, customerID: String, itemName: String)
defined class CustomerOrder
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3545 次 |
| 最近记录: |