Warisan Python (Dengan Contoh)

Warisan membolehkan kita menentukan kelas yang mengambil semua fungsi dari kelas induk dan membolehkan kita menambah lebih banyak. Dalam tutorial ini, anda akan belajar menggunakan warisan di Python.

Video: Python Warisan

Warisan di Python

Warisan adalah ciri yang kuat dalam pengaturcaraan berorientasikan objek.

Ini merujuk kepada mendefinisikan kelas baru dengan sedikit atau tanpa modifikasi ke kelas yang ada. Kelas baru dipanggil kelas turunan (atau anak) dan kelas yang diwarisi dipanggil kelas asas (atau ibu bapa) .

Sintaks Python Inheritance

 kelas BaseClass: Badan kelas kelas asas DerivedClass (BaseClass): Badan kelas turunan

Kelas turunan mewarisi ciri dari kelas asas di mana ciri baru dapat ditambahkan kepadanya. Ini menghasilkan penggunaan semula kod.

Contoh Warisan di Python

Untuk menunjukkan penggunaan warisan, mari kita ambil contoh.

Poligon adalah angka tertutup dengan 3 sisi atau lebih. Katakanlah, kita mempunyai kelas yang disebut Polygonsebagai berikut.

 class Polygon: def __init__(self, no_of_sides): self.n = no_of_sides self.sides = (0 for i in range(no_of_sides)) def inputSides(self): self.sides = (float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)) def dispSides(self): for i in range(self.n): print("Side",i+1,"is",self.sides(i))

Kelas ini mempunyai atribut data untuk menyimpan bilangan sisi n dan besarnya setiap sisi sebagai senarai yang disebut sisi.

The inputSides()Cara mengambil masa dalam magnitud setiap sisi dan dispSides()memaparkan ini panjang sampingan.

Segi tiga adalah poligon dengan 3 sisi. Oleh itu, kita boleh membuat kelas yang disebut Triangle yang mewarisi dari Polygon. Ini menjadikan semua atribut kelas Polygon tersedia untuk kelas Segitiga.

Kami tidak perlu mendefinisikannya lagi (penggunaan semula kod) Segitiga boleh didefinisikan sebagai berikut.

 class Triangle(Polygon): def __init__(self): Polygon.__init__(self,3) def findArea(self): a, b, c = self.sides # calculate the semi-perimeter s = (a + b + c) / 2 area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('The area of the triangle is %0.2f' %area)

Walau bagaimanapun, kelas Trianglemempunyai kaedah baru findArea()untuk mencari dan mencetak luas segitiga. Berikut adalah contoh larian.

 >>> t = Triangle() >>> t.inputSides() Enter side 1 : 3 Enter side 2 : 5 Enter side 3 : 4 >>> t.dispSides() Side 1 is 3.0 Side 2 is 5.0 Side 3 is 4.0 >>> t.findArea() The area of the triangle is 6.00

Kita dapat melihat bahawa walaupun kita tidak menentukan kaedah seperti inputSides()atau dispSides()untuk kelas Trianglesecara berasingan, kita dapat menggunakannya.

Sekiranya atribut tidak dijumpai di kelas itu sendiri, carian diteruskan ke kelas asas. Ini berulang secara berulang, jika kelas asas itu sendiri berasal dari kelas lain.

Kaedah Mengatasi di Python

Dalam contoh di atas, perhatikan __init__()kaedah yang ditentukan di kedua kelas, Segitiga dan juga Poligon. Apabila ini berlaku, kaedah dalam kelas yang diturunkan akan mengatasi kaedah di kelas asas. Ini bermaksud, __init__()di Segitiga mendapat keutamaan daripada __init__di Poligon.

Secara amnya apabila mengatasi kaedah asas, kita cenderung memperluas definisi daripada hanya menggantinya. Perkara yang sama dilakukan dengan memanggil kaedah di kelas asas dari yang di kelas turunan (memanggil Polygon.__init__()dari __init__()dalam Triangle).

Pilihan yang lebih baik adalah menggunakan fungsi terbina dalam super(). Jadi, super().__init__(3)setara dengan Polygon.__init__(self,3)dan disukai. Untuk mengetahui lebih lanjut mengenai super()fungsi di Python, lawati fungsi Python super ().

Dua fungsi terbina dalam isinstance()dan issubclass()digunakan untuk memeriksa warisan.

Fungsi isinstance()kembali Truejika objek itu adalah contoh kelas atau kelas lain yang berasal darinya. Setiap kelas di Python mewarisi dari kelas asas object.

 >>> isinstance(t,Triangle) True >>> isinstance(t,Polygon) True >>> isinstance(t,int) False >>> isinstance(t,object) True

Begitu juga, issubclass()digunakan untuk memeriksa warisan kelas.

 >>> issubclass(Polygon,Triangle) False >>> issubclass(Triangle,Polygon) True >>> issubclass(bool,int) True

Artikel menarik...