Warisan kelas
1. Tentukan pewarisan kelas
Pertama sekali, mari lihat sintaks asas pewarisan kelas:
class ClassName(BaseClassName): <statement-1> . . . <statement-N>
Apabila menentukan kelas, anda boleh menulis kelas yang diwarisi dalam kurungan 't gunakannya, Apabila mewarisi kelas, anda juga harus menulis untuk mewarisi kelas objek, kerana kelas objek ialah kelas induk bagi semua kelas dalam Python.
Sudah tentu perkara di atas adalah warisan tunggal, Python juga menyokong warisan berbilang Sintaks khusus adalah seperti berikut:
class ClassName(Base1,Base2,Base3): <statement-1> . . . <statement-N>
Satu perkara yang perlu diberi perhatian tentang warisan berbilang: jika terdapat nama kaedah yang sama dalam kelas induk, tetapi ia tidak. ditentukan apabila menggunakannya dalam subkelas , Python mencari dari kiri ke kanan dalam susunan kelas induk dalam kurungan, iaitu, apabila kaedah itu tidak dijumpai dalam subkelas, ia mencari dari kiri ke kanan untuk melihat sama ada kelas induk mengandungi kaedah.
Jadi apa yang boleh dilakukan oleh subkelas yang diwarisi?
Faedah subkelas yang diwarisi:
akan mewarisi sifat dan kaedah kelas induk
Anda boleh menentukannya sendiri dan mengatasi sifat dan kaedah kelas induk
2
Sebuah kelas mewarisi kelas induk Selepas menambah kelas, anda boleh terus memanggil kaedah kelas induk Contohnya, dalam contoh berikut, UserInfo2 mewarisi daripada kelas induk UserInfo, dan anda boleh terus memanggil kaedah get_account induk. kelas.#!/usr/bin/env python # -*- coding: UTF-8 -*- class UserInfo(object): lv = 5 def __init__(self, name, age, account): self.name = name self._age = age self.__account = account def get_account(self): return self.__account class UserInfo2(UserInfo): pass if __name__ == '__main__': userInfo2 = UserInfo2('两点水', 23, 347073565); print(userInfo2.get_account())
3. Menulis semula kaedah kelas induk
Sudah tentu, anda juga boleh mengatasi kaedah kelas induk. Contoh:#!/usr/bin/env python3 # -*- coding: UTF-8 -*- class UserInfo(object): lv = 5 def __init__(self, name, age, account): self.name = name self._age = age self.__account = account def get_account(self): return self.__account @classmethod def get_name(cls): return cls.lv @property def get_age(self): return self._age class UserInfo2(UserInfo): def __init__(self, name, age, account, sex): super(UserInfo2, self).__init__(name, age, account) self.sex = sex; if __name__ == '__main__': userInfo2 = UserInfo2('两点水', 23, 347073565, '男'); # 打印所有属性 print(dir(userInfo2)) # 打印构造函数中的属性 print(userInfo2.__dict__) print(UserInfo2.get_name())Hasil cetakan terakhir: Ini ialah pembina kelas induk yang telah ditulis semula.
4. Jenis penghakiman subkelas
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- class User1(object): pass class User2(User1): pass class User3(User2): pass if __name__ == '__main__': user1 = User1() user2 = User2() user3 = User3() # isinstance()就可以告诉我们,一个对象是否是某种类型 print(isinstance(user3, User2)) print(isinstance(user3, User1)) print(isinstance(user3, User3)) # 基本类型也可以用isinstance()判断 print(isinstance('两点水', str)) print(isinstance(347073565, int)) print(isinstance(347073565, str))adalah seperti berikut:
True True True True True FalseAnda boleh melihat bahawa isinstance() bukan sahaja boleh memberitahu kami sama ada sesuatu objek adalah daripada jenis tertentu, tetapi juga boleh digunakan untuk menilai jenis asas.