هل هناك أي بيثون مكافئ لفئة حالة سكالا؟ مثل إنشاء المصانع تلقائيًا التي يتم تعيينها للحقول دون كتابة لوحة مرجعية.
هل هناك أي بيثون مكافئ لفئة حالة سكالا؟ مثل إنشاء المصانع تلقائيًا التي يتم تعيينها للحقول دون كتابة لوحة مرجعية.
الطريقة الحالية والحديثة للقيام بذلك (اعتبارًا من Python 3.7) هي باستخدام فئة بيانات . على سبيل المثال ، سكالا case class Point(x: Int, y: Int)
يصبح:
from dataclasses import dataclass
@dataclass(frozen=True)
class Point:
x: int
y: int
ال frozen=True
الجزء اختياري ؛ يمكنك حذفها للحصول على فئة بيانات قابلة للتغيير. لقد أدرجتها من أجل التكافؤ مع فئة حالة Scala.
قبل بايثون 3.7 ، هناك collections.namedtuple
:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
تعتبر الأسماء المسماة غير قابلة للتغيير ، لأنها أصفاف. إذا كنت ترغب في إضافة طرق ، يمكنك توسيع النطاق المسمى:
class Point(namedtuple('Point', ['x', 'y'])):
def foo():
pass
إذا كنت تستخدم 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)
تأكد من ترقية python3 إلى python 3.7.
في macos: brew upgrade python3
بينما تبدو فئة البيانات أعلاه في سكالا ،
scala> final case class CustomerOrder(id: Int, customerID: String, itemName: String)
defined class CustomerOrder