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:

cbf5cc8617f8b40e0e38e94fd0d892e.png

Ini ialah pembina kelas induk yang telah ditulis semula.

4. Jenis penghakiman subkelas

Untuk hubungan pewarisan kelas, kadangkala kita perlu menilai jenis kelas.

Anda boleh menggunakan fungsi isinstance()

Anda boleh memahami penggunaan fungsi isinstance() dengan contoh. Hasil keluaran

#!/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
False

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

Meneruskan pembelajaran
  • Cadangan kursus
  • Muat turun perisian kursus