Maison >développement back-end >Tutoriel Python >Sept questions Python pour améliorer l'alphabétisation

Sept questions Python pour améliorer l'alphabétisation

WBOY
WBOYavant
2023-04-11 16:52:031815parcourir

J'ai appris quelque chose de ces 7 questions, qui se résument comme suit :

1. Opérateurs arithmétiques réflexifs

Vous connaissez peut-être les fonctions magiques en Python, telles que __add__​ et __sub__​ qui représentent l'opérateur + -, qui représente obj. +/ - quelque chose, mais vous ne savez peut-être pas qu'il existe également une fonction __radd__, __rsub__, qui peut représenter quelque chose +/- obj.

Les exemples sont les suivants :

class Dog:
def __add__(self, other):
return "from __add__"
def __radd__(self, other):
return "from __radd__"
dog = Dog()
print(dog + 1) # from __add__
print(1 + dog) # from __radd__

2. __getattr__ vs __getattribute__

__getattr__​ La méthode magique ne sera appelée que lorsque nous essaierons d'obtenir un attribut qui n'existe pas, __getattribute__ sera appelée à chaque fois que nous essaierons d'accéder à un attribut. .

Le code est le suivant :

class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def __getattr__(self, key):
return f"{key} not found"
dog = Dog("taidi", 5)
print(dog.name)# taidi
print(dog.age) # 5
print(dog.breed) # breed not found
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def __getattribute__(self, key):
return f"{key} not found"
dog = Dog("taidi", 5)
print(dog.name)# name not found
print(dog.age) # age not found
print(dog.breed) # breed not found

3. Une autre façon d'écrire super().__init__()

class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
class Dog(Animal):
def __init__(self, name, age, breed):
super().__init__(name, age)
self.breed = breed

est équivalent à :

class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
class Dog(Animal):
def __init__(self, name, age, breed):
Animal.__init__(self, name, age)
self.breed = breed

Veuillez noter que Animal.__init__(self, name, age) ne peut pas manquer. le paramètre self .

4. Comment vérifier les sous-classes

class Animal: pass
class Dog(Animal): pass
class Cat(Animal): pass
class GermanSheperd(Dog): pass
print(Animal.__subclasses__())
# [<class '__main__.Dog'>, <class '__main__.Cat'>]

Cependant, .__subclasses__() ne peut vérifier que les sous-classes directes.

5. Lors de l'utilisation de plusieurs intégrations, quelle fonction du même nom est utilisée par la sous-classe ?

class A:
def test(self):
print("A")
class B:
def test(self):
print("B")
class C(A, B):
pass

C().test() # A

A et B ont tous deux des méthodes de test, alors laquelle C intègre-t-il ? En Python, la classe la plus à gauche est prioritaire.

Ici, A est la classe parent la plus à gauche, donc la méthode de test de A est intégrée.

Les dépôts multiples continuent de prêter à confusion, il est donc préférable de ne pas les utiliser.

6 Fonction magique __invert__

class Dog:
def __invert__(self):
return "test"
dog = Dog()
print(~dog) # test

~ L'opérateur signifie "bitwise not" et est généralement utilisé pour inverser le contenu. Un exemple plus significatif est le suivant :

class Coordinate:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"({self.x}, {self.y})"
def __invert__(self):
return Coordinate(-self.x, -self.y)
a = Coordinate(3, 4)
b = ~a
print(a, b) # (3, 4) (-3, -4)

7. Créez une classe sans utiliser class

def init(self, name, age):
self.name = name
self.age = age
def bark(self):
print("woof")
Dog = type("Dog", (), {"__init__":init, "bark":bark})


dog = Dog("taidi", 10)
print(dog.name)
print(dog.age)

# taidi
# 10

Ici, nous passons 3 paramètres à saisir pour créer notre classe.

Le premier paramètre __name__​ est le nom de la classe. Le deuxième paramètre __bases__​ est un tuple contenant la classe parent. Le troisième paramètre __dict__ est un dictionnaire contenant des attributs et des méthodes.

Équivalent à :

class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print("woof")

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer