Python Objekte                              (C) 2020-2024 T.Birnthaler OSTC GmbH
==============

Doku --> docs.python.org/3/glossary.html#term-object
         docs.python.org/3/glossary.html#term-new-style-class
         docs.python.org/3/library/functions.html?highlight=object#object
         docs.python.org/3/reference/datamodel.html?highlight=object

Python-OBJEKTE haben grundsätzlich folgende Eigenschaften und Fähigkeiten:

  type(OBJ)                    # Klasse von Objekt
  isinstance(OBJ, TYPE)        # Objekt ist aus Klasse oder Oberklasse
  isinstance(OBJ, (TYPE, ...)) # Objekt ist aus Klassen oder Oberklassen
  id(OBJ)                      # Identität von Objekt (Speicheradresse)
  str(OBJ)                     # Textform von Objekt (lesbare Form)
  repr(OBJ)                    # Textform von Objekt (Konstruktor-Aufruf)
  print(OBJ)                   # Textform von Objekt ausgeben
  F"{OBJ}"                     # Textform von Objekt ausgeben
  bool(OBJ)                    # Boolescher Wert von Objekt (STD: False)
  sys.getsizeof(OBJ)           # Größe von Objekt in Byte
  sys.getrefcount(OBJ)         # Anzahl Referenzen auf Objekt
                               #
  OBJ == OBJ2                  # WERT-mäßig gleich ("is" ohne __eq__)
  OBJ != OBJ2                  # WERT-mäßig verschieden ("is not" ohne __eq__))
  OBJ is OBJ2                  # IDENTITÄT gleich (id(OBJ) == id(OBJ2))
  OBJ is not OBJ2              # IDENTITÄT verschieden (id(OBJ) != id(OBJ2))
                               #
  del OBJ                      # Name + (EINE) Referenz auf Objekt löschen
                               #
  l = [OBJ, ...]               # Objekt ist Element in Liste
  t = (OBJ, ...)               # Objekt ist Element in Tupel
  d = {OBJ: VAL, ...}          # Objekt ist Key in Dictionary (falls "hashable")
  d = [KEY: OBJ, ...}          # Objekt ist Value in Dictionary
  s = {OBJ, ...}               # Objekt ist Element in Set (falls "hashable")
  OBJ [not] in l               # Objekt (nicht) in Liste enthalten?
  OBJ [not] in t               # Objekt (nicht) in Tupel enthalten?
  OBJ [not] in d               # Objekt (nicht) in Dictionary enthalten? (als Key)
  OBJ [not] in s               # Objekt (nicht) in Set enthalten?
                               #
  for ELEM (OBJ, ...):         # Schleife über Objekte
      ...                      #
                               #
  def FUNC(OBJ):               # Funktions-Parameter + Rückgabewert
      ...                      #
      return OBJ2              #
  OBJ2 = FUNC(OBJ)             # Aufruf

Alle Klassen - insbesondere eigene Klassen - (außer den Standard-Datentypen
NonType, bool, int, float, complex, str, tuple, list, dict, set, frozenset,
bytes, bytearray, memoryview) ERBEN von der obersten Basis-Klasse "object".

Leere Klasse anlegen (erbt automatisch von oberster Basis-Klasse "object"):

  class Klasse:       # eigentlich: class Klasse(object):
      pass            #                 pass

Objekte einer Klasse anlegen:

  OBJ = Klasse()

Objekte dieser Klasse (und auch die Objekte vom Typ Funktion, Modul, Klasse)
haben dann bereits folgende Eigenschaften und Fähigkeiten:

  OBJ.ATTR = WERT     # Attribute zuweisen
  del OBJ.ATTR        # Attribut löschen
  OBJ.ATTR            # Attribut lesen
  ATTR in OBJ         # Attribut vorhanden?
                      #
  OBJ == OBJ2         # WERT gleich   (fällt zurück auf "is"     ohne __eq__)
  OBJ != OBJ2         # WERT ungleich (fällt zurück auf "is not" ohne __eq__)