[PYTHON] Hinweise zum Anpassen der Diktatlistenklasse

memo ・ Benutzerdefinierte Liste memo.c=[1,2,3] Wenn Sie es so initialisieren, wird es mit einer normalen Liste initialisiert. Schreiben Sie also den Code, um dies mit `` `__ setattr__``` von memo_base zu vermeiden

Code

class memo_base(object):

    def __init__(self):
        self.prm=["PRM"]
        self.a=""
        self.b=self.dict_base(self.prm)
        self.c=self.list_base(self.prm,[1,2,3])
    


    #__getattribute__(self, name, /)
    #Return getattr(self, name).
    def __getattribute__(self, name):
        print("memo_base.__getattribute__>",name)
        return super().__getattribute__( name)


    
    def __setattr__(self, name, value):
        print("memo_base.__setattr__>{}>{}".format(name, value))
        #Initialisierung vermeiden
        if name=="b":
            print("dict_Basis setzen")
            value=self.dict_base(self.prm,value)
        if name=="c":
            print("list_Basis setzen")
            value=self.list_base(self.prm,value)
        super().__setattr__( name, value)
    
    
    #Anpassung diktieren
    class dict_base(dict):
        pass
        #  __setitem__(self, key, value, /)
        #      Set self[key] to value.
        def __setitem__(self, key, value):
            print("dict_base.__setitem__>{}>{}".format(key, value))
            super().__setitem__(key, value)


        #object.__getitem__(self, key)
        def __getitem__(self, key):
            print("dict_base.__getitem__>{}".format(key))
            return super().__getitem__(key)
    
        #  __init__(self, /, *args, **kwargs)
        #    Initialize self.  See help(type(self)) for accurate signature.
        def __init__(self,prm , *args, **kwargs):
            super().__init__( *args, **kwargs)
        

    #Liste anpassen
    class list_base(list):
        pass
        def __setitem__(self, key, value):
            print("list_base.__setitem__>{}>{}".format(key, value))
            super().__setitem__(key, value)
            
        #object.__getitem__(self, key)
        def __getitem__(self, key):
            print("list_base.__getitem__>{}".format(key))
            return super().__getitem__(key)

        def __init__(self,prm , *args, **kwargs):
            super().__init__( *args, **kwargs)
            
            
        #append(self, object, /)
        #Append object to the end of the list.
        def append(self, object):
            print("list_base.append >{}".format(object))
            print("list_base.self befor  super().append >{}".format(self))
            super().append(object)
            print("list_base.self after  super().append > {}".format(self))

print("#Instanziierung#Instanziierung#Instanziierung#Instanziierung")
print("> memo=memo_base()")
memo=memo_base()

print()
print("#Nicht verwaltet#Nicht verwaltet#Nicht verwaltet#Nicht verwaltet#Nicht verwaltet#Nicht verwaltet")

print()
print("> memo.z=99 ")
memo.z=99 

print()
print('> print( memo.z)')
print(memo.z)

print()
print("#Variable#Variable#Variable#Variable#Variable#Variable#Variable#Variable#Variable")

print()
print("> memo.a=5")
memo.a=5

print()
print('> print memo.a')
print(memo.a)


print()
print("#dict #dict #dict #dict #dict #dict #dict #dict #dict #dict #dict #dict #dict ")

print()
print('> memo.b["b3"]="b33"')
memo.b["b3"]="b33"

print()
print('> print(memo.b["b3"])')
print(memo.b["b3"])

print()
print("Zurücksetzen")
print('"> memo.b={"b1":"b11" ,"b2":"b22" }')
memo.b={"b1":"b11" ,"b2":"b22" }

print()
print('> memo.b["b3"]="b33"')
memo.b["b3"]="b33 neu"

print()
print('> memo.b["b2"]="b222"')
memo.b["b2"]="b222 ändern"

print()
print('> print() memo.b)')
print(memo.b)

print()
print('> print( memo.b["b2"])')
print(memo.b["b2"])

print()
print("#list #list #list #list #list #list #list #list #list #list #list ")


print()
print("> memo.c[2]=22")
memo.c[2]=22

print()
print("> print(memo.c[2])")
print(memo.c[2])



print()
print("Zurücksetzen")
print("> memo.c=[1,2,3]")
memo.c=[1,2,3]

print()
print("> memo.c[2]=22")
memo.c[2]=22

print()
print("> memo.c.append(4)")
memo.c.append(4)

print()
print('> print( memo.c)')
print(memo.c)

print()
print('> print (memo.c[2])')
print(memo.c[2])



print()

Ergebnis

#Instanziierung#Instanziierung#Instanziierung#Instanziierung
> memo=memo_base()
memo_base.__setattr__>prm>['PRM']
memo_base.__setattr__>a>
memo_base.__getattribute__> dict_base
memo_base.__getattribute__> prm
memo_base.__setattr__>b>{}
dict_Basis setzen
memo_base.__getattribute__> dict_base
memo_base.__getattribute__> prm
memo_base.__getattribute__> list_base
memo_base.__getattribute__> prm
memo_base.__setattr__>c>[1, 2, 3]
list_Basis setzen
memo_base.__getattribute__> list_base
memo_base.__getattribute__> prm

#Nicht verwaltet#Nicht verwaltet#Nicht verwaltet#Nicht verwaltet#Nicht verwaltet#Nicht verwaltet

> memo.z=99 
memo_base.__setattr__>z>99

> print( memo.z)
memo_base.__getattribute__> z
99

#Variable#Variable#Variable#Variable#Variable#Variable#Variable#Variable#Variable

> memo.a=5
memo_base.__setattr__>a>5

> print memo.a
memo_base.__getattribute__> a
5

#dict #dict #dict #dict #dict #dict #dict #dict #dict #dict #dict #dict #dict 

> memo.b["b3"]="b33"
memo_base.__getattribute__> b
dict_base.__setitem__>b3>b33

> print(memo.b["b3"])
memo_base.__getattribute__> b
dict_base.__getitem__>b3
b33

Zurücksetzen
"> memo.b={"b1":"b11" ,"b2":"b22" }
memo_base.__setattr__>b>{'b1': 'b11', 'b2': 'b22'}
dict_Basis setzen
memo_base.__getattribute__> dict_base
memo_base.__getattribute__> prm

> memo.b["b3"]="b33"
memo_base.__getattribute__> b
dict_base.__setitem__>b3>b33 neu

> memo.b["b2"]="b222"
memo_base.__getattribute__> b
dict_base.__setitem__>b2>b222 ändern

> print() memo.b)
memo_base.__getattribute__> b
{'b1': 'b11', 'b2': 'b222 ändern', 'b3': 'b33 neu'}

> print( memo.b["b2"])
memo_base.__getattribute__> b
dict_base.__getitem__>b2
b222 ändern

#list #list #list #list #list #list #list #list #list #list #list 

> memo.c[2]=22
memo_base.__getattribute__> c
list_base.__setitem__>2>22

> print(memo.c[2])
memo_base.__getattribute__> c
list_base.__getitem__>2
22

Zurücksetzen
> memo.c=[1,2,3]
memo_base.__setattr__>c>[1, 2, 3]
list_Basis setzen
memo_base.__getattribute__> list_base
memo_base.__getattribute__> prm

> memo.c[2]=22
memo_base.__getattribute__> c
list_base.__setitem__>2>22

> memo.c.append(4)
memo_base.__getattribute__> c
list_base.append >4
list_base.self befor  super().append >[1, 2, 22]
list_base.self after  super().append > [1, 2, 22, 4]

> print( memo.c)
memo_base.__getattribute__> c
[1, 2, 22, 4]

> print (memo.c[2])
memo_base.__getattribute__> c
list_base.__getitem__>2
22

Recommended Posts

Hinweise zum Anpassen der Diktatlistenklasse
Ein Hinweis zur neuen Stilbasisklasse
Ich habe ein wenig über die Klasse recherchiert
Ein Briefing über die Wut, die durch das Schaben verursacht wurde
Notieren Sie sich die Liste der grundlegenden Verwendungszwecke von Pandas
Anmerkung der Klasse sklearn.naive_bayes.MultinomialNB (alpha = 1.0, fit_prior = True, class_prior = None)
Hinweis zum Standardverhalten von collate_fn in PyTorch
Extrahieren Sie den Wert von dict oder list als Zeichenfolge
Python / Machen Sie ein Diktat aus einer Liste.
Sortieren Sie die Liste, die das Diktat enthält
Ein Hinweis zum Überprüfen der Verbindung zum Lizenzserver-Port
Klasse, die die API von DMM trifft
Ändern Sie die Liste in der for-Anweisung
Hinweise zum Aktivieren von PostgreSQL mit Django
[Python] Ein Fortschrittsbalken auf dem Terminal
Ein Memo, dass ich das Pyramid Tutorial ausprobiert habe
Wenn verzweigen, hängt davon ab, ob die Liste ein bestimmtes Element enthält
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Kopieren Sie die Liste in Python
Holen Sie sich nur Unterklassenelemente in eine Liste
Python: Bereiten Sie einen Serializer für die Klasseninstanz vor:
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Berechnen Sie die Wahrscheinlichkeit von Ausreißern auf den Box-Whiskern
Verwenden Sie das elektronische Papiermodul als Aufgabenliste
Python Amateur versucht die Liste zusammenzufassen ②
Erstellen Sie eine GUI auf dem Terminal mit Flüchen
Ein Hinweis zur Bibliotheksimplementierung, in der Hyperparameter mithilfe der Bayes'schen Optimierung in Python untersucht werden
Nur eine Notiz
Hinweis: Listeneinschlussnotation
Geben Sie die Lautstärke unter Linux an und spielen Sie den Sound ab
Erstellen Sie unter Linux einen QR-Code für die URL
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
DJango Hinweis: Von Anfang an (mit einer generischen Ansicht)
DJango Hinweis: Von Anfang an (Erstellen einer Ansicht aus einer Vorlage)
Beachten Sie beim Initialisieren einer Liste in Python
Machen Sie das Modell zu einer Zeichenfolge in der Django-HTML-Vorlage
Schreiben Sie in Python ein logarithmisches Histogramm auf die x-Achse
Hinweise zur Beschleunigung des Python-Codes mit Numba
Ein Hinweis zum Ausprobieren eines einfachen MCMC-Tutorials auf PyMC3
Eine Überlegung zur Visualisierung des Anwendungsbereichs des Vorhersagemodells
Erstellen einer Liste, wenn die Nomenklatur für einen bestimmten Zeitraum gültig ist
Zeigen Sie eine Liste häufig verwendeter Befehle in Zsh an
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
"Cython" -Tutorial, um Python explosiv zu machen: Übergeben Sie ein C ++ - Klassenobjekt an ein Klassenobjekt auf der Python-Seite. Teil ①