Tujuh soalan Python untuk meningkatkan celik huruf

WBOY
Lepaskan: 2023-04-11 16:52:03
ke hadapan
1790 orang telah melayarinya

Saya belajar sesuatu daripada 7 soalan ini, yang diringkaskan seperti berikut:

1 Operator aritmetik reflektif

Anda mungkin tahu fungsi ajaib dalam Python, seperti __add__​ dan __sub__​. Mewakili operator + -, yang mewakili obj +/- sesuatu, tetapi anda mungkin tidak tahu bahawa terdapat juga fungsi __radd__, __rsub__, yang boleh mewakili sesuatu +/- obj.

Contohnya:

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__
Salin selepas log masuk

2. __getattr__ vs __getattribute__

__getattr__​ Kaedah ajaib hanya akan dipanggil apabila kita cuba mendapatkan atribut yang tidak wujud, __getattribute__ dalam Ia akan dipanggil setiap kali kami cuba mengakses harta itu.

Kodnya adalah seperti berikut:

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
Salin selepas log masuk
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
Salin selepas log masuk

3. Satu lagi cara menulis 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
Salin selepas log masuk

bersamaan dengan:

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
Salin selepas log masuk

Sila ambil perhatian bahawa Animal.__init__(diri, nama, umur) tidak boleh kehilangan parameter diri.

4. Kaedah untuk menyemak subkelas

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

Walau bagaimanapun, .__subclasses__() hanya boleh menyemak subclass langsung.

5. Apabila melakukan pelbagai penyepaduan, fungsi dengan nama yang sama digunakan oleh subkelas?

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

C().test() # A
Salin selepas log masuk

A dan B kedua-duanya mempunyai kaedah ujian, jadi yang manakah C disepadukan? Dalam Python, kelas paling kiri diutamakan.

Di sini, A ialah kelas induk paling kiri, jadi kaedah ujian A disepadukan.

Caj semula berbilang masih mengelirukan, jadi sebaiknya jangan gunakannya.

6 __invert__ fungsi ajaib

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

~ operator bermaksud "bitwise NOT" dan biasanya digunakan untuk menyongsangkan kandungan. Contoh yang lebih bermakna adalah seperti berikut:

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)
Salin selepas log masuk

7 Cipta kelas tanpa menggunakan kelas

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
Salin selepas log masuk

Di sini, kami lulus 3 parameter untuk menaip bagi mencipta kelas kami.

Parameter pertama __name__​ ialah nama kelas Parameter kedua __bases__​ ialah tuple yang mengandungi kelas induk Parameter ketiga __dict__ ialah kamus yang mengandungi atribut dan kaedah.

bersamaan dengan:

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

Atas ialah kandungan terperinci Tujuh soalan Python untuk meningkatkan celik huruf. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan