Sieben Python-Fragen zur Verbesserung der Lese- und Schreibfähigkeit

WBOY
Freigeben: 2023-04-11 16:52:03
nach vorne
1791 Leute haben es durchsucht

Ich habe aus diesen 7 Fragen etwas gewonnen, die wie folgt zusammengefasst sind:

1. Reflektierende arithmetische Operatoren

Sie kennen vielleicht die magischen Funktionen in Python, wie __add__​ und __sub__​, die den +-Operator darstellen, der obj darstellt +/ - etwas, aber Sie wissen vielleicht nicht, dass es auch eine Funktion __radd__, __rsub__ gibt, die etwas +/- obj darstellen kann.

Beispiele sind wie folgt:

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__
Nach dem Login kopieren

2. __getattr__ vs __getattribute__

__getattr__​ Die magische Methode wird nur aufgerufen, wenn wir versuchen, ein Attribut abzurufen, das nicht existiert, __getattribute__ wird jedes Mal aufgerufen, wenn wir versuchen, auf ein Attribut zuzugreifen .

Der Code lautet wie folgt:

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
Nach dem Login kopieren
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
Nach dem Login kopieren

3. Eine andere Schreibweise von 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
Nach dem Login kopieren

ist äquivalent zu:

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
Nach dem Login kopieren

Bitte beachten Sie, dass Animal.__init__(self, name, age) nicht fehlen darf der self-Parameter.

4. So prüfen Sie Unterklassen

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

Allerdings kann .__subclasses__() nur direkte Unterklassen prüfen.

5. Welche Funktion mit demselben Namen wird von der Unterklasse verwendet, wenn mehrere Integrationen verwendet werden?

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

C().test() # A
Nach dem Login kopieren

A und B haben beide Testmethoden. Welche integriert C also? In Python hat die Klasse ganz links Vorrang.

Hier ist A die übergeordnete Klasse ganz links, daher ist die Testmethode von A integriert.

Mehrfacheinzahlungen sind weiterhin verwirrend, daher ist es besser, sie nicht zu nutzen.

6 __invert__ magische Funktion

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

~ Der Operator steht für „bitweise nicht“ und wird normalerweise zum Invertieren von Inhalten verwendet. Ein aussagekräftigeres Beispiel ist wie folgt:

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)
Nach dem Login kopieren

7. Erstellen Sie eine Klasse ohne Verwendung der Klasse

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
Nach dem Login kopieren

Hier übergeben wir 3 Parameter an type, um unsere Klasse zu erstellen.

Der erste Parameter __name__ ist der Name der Klasse. Der zweite Parameter __bases__ ist ein Tupel, das die übergeordnete Klasse enthält. Der dritte Parameter __dict__ ist ein Wörterbuch, das Attribute und Methoden enthält.

Entspricht:

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

Das obige ist der detaillierte Inhalt vonSieben Python-Fragen zur Verbesserung der Lese- und Schreibfähigkeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage