Python-äquivalent von Scala Fall Klasse

Gibt es eine Python-äquivalent von Scala Fall Klasse? Wie die automatische Generierung von Konstruktoren, die weisen Felder ohne schreiben aus Textbausteinen.

  • Was meinst du mit „die Implementierung von Scala Fall Klasse“? Schreiben Sie ein Scala-compiler in Python? Was meinst du mit „Entsprechung der Scala Fall Klasse“? Was, wenn die unzähligen Eigenschaften einer Scala Fall Klasse wollen Sie gleichwertig? Der statische Typ-überprüfung? Was meinst du mit „Klasse “ Variablen“? Scala nicht Klassenvariablen. Was meinst du mit „ohne die Schaffung von Klassen-Instanzen“? In Scala, jeder Wert ist ein Objekt, und jedes Objekt ist eine Instanz einer Klasse.
  • Ich habe bearbeitet Sie Ihre Frage für mehr Klarheit in der Hoffnung, dass es wieder geöffnet werden können. Fühlen Sie sich frei, zurück zu Rollen oder zu Bearbeiten, wenn die neue Frage nicht mit dem übereinstimmt, was du meinst.
InformationsquelleAutor james.bondu | 2018-07-14



2 Replies
  1. 13

    Den heutigen, modernen Weg, dies zu tun (wie der Python 3.7) ist mit einem Daten-Klasse. Zum Beispiel, die Scala case class Point(x: Int, y: Int) wird:

    from dataclasses import dataclass
    
    @dataclass(frozen=True)
    class Point:
        x: int
        y: int

    Den frozen=True Teil ist optional; Sie können ihn weglassen, um zu bekommen eine veränderliche Daten-Klasse. Ich habe es für die Parität mit Scala Fall Klasse.

    Bevor 3.7 Python, es gibt Sammlungen.namedtuple:

    from collections import namedtuple
    Point = namedtuple('Point', ['x', 'y'])

    Namedtuples sind unveränderlich, wie Sie sind Tupel. Wenn Sie möchten, fügen Sie Methoden, Sie können erweitern die namedtuple:

    class Point(namedtuple('Point', ['x', 'y'])):
        def foo():
            pass
    • Und kann tief geschachtelte dataclasses oder namedtuples kopiert werden, ähnlich wie Scala case class, wie z.B. Scala können mit Objektive?
    • Ich weiß nicht Objektive, aber man kann immer nach einer anderen Frage, um das herauszufinden.
  2. 2

    Wenn Sie python3.7 Sie erhalten Daten-Klassen als @dataclass. Offizielle doc hier – 30.6. dataclasses — Daten zu Klassen

    from dataclasses import dataclass
    
    @dataclass
    class CustomerOrder(object):
      order_id: int
      customer_id: str
      item_name: str
    
    order = CustomerOrder(1, '001', 'Guitar')
    print(order)

    Stellen Sie sicher, dass das upgrade Python ist3 python 3.7.

    In macos: brew upgrade python3

    Während der oben genannten Daten, die Klasse in scala sieht so aus,

    scala> final case class CustomerOrder(id: Int, customerID: String, itemName: String)
    defined class CustomerOrder

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.