Heim  >  Artikel  >  Backend-Entwicklung  >  Sieben Python-Fragen zur Verbesserung der Lese- und Schreibfähigkeit

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

WBOY
WBOYnach vorne
2023-04-11 16:52:031753Durchsuche

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__

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
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. 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

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

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'>]

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

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

~ 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)

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

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")

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen