مكافئ بايثون لفئة حالة سكالا [مغلق]

4

هل هناك أي بيثون مكافئ لفئة حالة سكالا؟ مثل إنشاء المصانع تلقائيًا التي يتم تعيينها للحقول دون كتابة لوحة مرجعية.

2 الاجابة

13
افضل جواب

الطريقة الحالية والحديثة للقيام بذلك (اعتبارًا من 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
:مؤلف
2
افضل جواب

إذا كنت تستخدم 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
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام