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

WBOY
Libérer: 2023-04-11 16:52:03
avant
1730 Les gens l'ont consulté

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__
Copier après la connexion

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
Copier après la connexion
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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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'>]
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

~ 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)
Copier après la connexion

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
Copier après la connexion

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")
Copier après la connexion

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!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!