[PYTHON] Remarques sur la personnalisation de la classe de liste de dict

memo ・ Liste personnalisée memo.c=[1,2,3] Si vous l'initialisez comme ceci, il sera initialisé avec une liste normale, alors écrivez le code pour l'éviter avec `` __ setattr__``` de memo_base

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))
        #Évitez l'initialisation
        if name=="b":
            print("dict_définir la base")
            value=self.dict_base(self.prm,value)
        if name=="c":
            print("list_définir la base")
            value=self.list_base(self.prm,value)
        super().__setattr__( name, value)
    
    
    #personnalisation de dict
    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)
        

    #Personnaliser la liste
    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("#Instanciation#Instanciation#Instanciation#Instanciation")
print("> memo=memo_base()")
memo=memo_base()

print()
print("#Non géré#Non géré#Non géré#Non géré#Non géré#Non géré")

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("réinitialisation")
print('"> memo.b={"b1":"b11" ,"b2":"b22" }')
memo.b={"b1":"b11" ,"b2":"b22" }

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

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

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("réinitialisation")
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()

résultat

#Instanciation#Instanciation#Instanciation#Instanciation
> 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_définir la base
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_définir la base
memo_base.__getattribute__> list_base
memo_base.__getattribute__> prm

#Non géré#Non géré#Non géré#Non géré#Non géré#Non géré

> 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

réinitialisation
"> memo.b={"b1":"b11" ,"b2":"b22" }
memo_base.__setattr__>b>{'b1': 'b11', 'b2': 'b22'}
dict_définir la base
memo_base.__getattribute__> dict_base
memo_base.__getattribute__> prm

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

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

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

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

#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

réinitialisation
> memo.c=[1,2,3]
memo_base.__setattr__>c>[1, 2, 3]
list_définir la base
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

Remarques sur la personnalisation de la classe de liste de dict
Une note sur la nouvelle classe de base de style
J'ai fait un peu de recherche sur la classe
Un briefing sur la colère provoquée par le grattage
Prenez note de la liste des utilisations de base de Pandas
Note de la classe sklearn.naive_bayes.MultinomialNB (alpha = 1.0, fit_prior = True, class_prior = None)
Remarque sur le comportement par défaut de collate_fn dans PyTorch
Extraire la valeur de dict ou list sous forme de chaîne de caractères
python / Créer un dict à partir d'une liste.
Trier la liste qui contient le dict
Remarque sur la façon de vérifier la connexion au port du serveur de licences
Classe qui atteint l'API de DMM
Changer la liste dans l'instruction for
Remarques sur l'activation de PostgreSQL avec Django
[Python] Une barre de progression sur le terminal
Un mémo que j'ai essayé le tutoriel Pyramid
Si branche en fonction de l'existence ou non d'un élément spécifique dans la liste
[Note] Créez une classe de fuseau horaire sur une ligne avec python
Copiez la liste en Python
Obtenir uniquement les éléments de sous-classe dans une liste
Python: préparez un sérialiseur pour l'instance de classe:
Écrire une note sur la version python de python virtualenv
Calculer la probabilité de valeurs aberrantes sur les moustaches de la boîte
Utilisez le module de papier électronique comme liste de tâches
amateur python tente de résumer la liste ②
Créez une interface graphique sur le terminal à l'aide de curses
Une note sur l'implémentation de la bibliothèque qui explore les hyperparamètres à l'aide de l'optimisation bayésienne en Python
Juste une note
Remarque: Notation d'inclusion de liste
Spécifiez le volume sous Linux et jouez le son
Créez un code QR pour l'URL sous Linux
Implémentation python de la classe de régression linéaire bayésienne
Faire un point d'arrêt sur la couche c avec python
Remarque DJango: depuis le début (en utilisant une vue générique)
Remarque DJango: depuis le début (création d'une vue à partir d'un modèle)
Choses à noter lors de l'initialisation d'une liste en Python
Faire du modèle une chaîne sur le modèle HTML Django
Ecrire un histogramme à l'échelle logarithmique sur l'axe des x en python
Remarques sur l'accélération du code Python avec Numba
Une note d'essayer un simple tutoriel MCMC sur PyMC3
Une réflexion sur la visualisation du champ d'application du modèle de prédiction
Créer une liste lorsque la nomenclature est pour une certaine période de temps
Afficher une liste des commandes fréquemment utilisées sur Zsh
Note Python: Le mystère de l'attribution d'une variable à une variable
Tutoriel "Cython" pour rendre Python explosif: Passez un objet de classe C ++ à un objet de classe côté Python. Partie ①