Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

Python - Berorientasi Objek

Halaman SebelumnyaHalaman Berikutnya

Python telah menjadi bahasa berorientasi objek sejak ada. Karena itu, membuat dan menggunakan kelas dan objek sangat mudah. Bab ini membantu Anda menjadi ahli dalam menggunakan dukungan pemrograman berorientasi objek Python.

Jika Anda tidak memiliki pengalaman sebelumnya dengan pemrograman berorientasi objek (OO), Anda mungkin ingin berkonsultasi dengan kursus pengantar atau setidaknya semacam tutorial sehingga Anda memiliki pemahaman konsep dasar.

Namun, di sini ada sedikit pengenalan Pemrograman Berorientasi Objek (OOP) untuk mempercepat Anda

Ikhtisar Terminologi OOP

Membuat Kelas

Kelas pernyataan menciptakan definisi kelas baru. Nama kelas langsung mengikuti kata kunci kelas diikuti oleh titik dua sebagai berikut

class ClassName:
   'Optional class documentation string'
   class_suite

Contoh

Berikut adalah contoh kelas Python sederhana

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

Membuat Objek Instance

Untuk membuat instance kelas, Anda memanggil kelas menggunakan nama kelas dan meneruskan argumen apa pun __init__ metode menerima.

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)

Mengakses Atribut

Anda mengakses atribut objek menggunakan operator titik dengan objek. Variabel kelas akan diakses menggunakan nama kelas sebagai berikut −

emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

Sekarang, gabungkan semua konsep

Demo Langsung
#!/usr/bin/python

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

"This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
"This would create second object of Employee class"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut

Name :  Zara ,Salary:  2000
Name :  Manni ,Salary:  5000
Total Employee 2

Anda dapat menambahkan, menghapus, atau mengubah atribut kelas dan objek kapan saja −

emp1.age = 7  # Add an 'age' attribute.
emp1.age = 8  # Modify 'age' attribute.
del emp1.age  # Delete 'age' attribute.

Alih-alih menggunakan pernyataan normal untuk mengakses atribut, Anda dapat menggunakan fungsi berikut −

hasattr(emp1, 'age')    # Returns true if 'age' attribute exists
getattr(emp1, 'age')    # Returns value of 'age' attribute
setattr(emp1, 'age', 8) # Set attribute 'age' at 8
delattr(empl, 'age')    # Delete attribute 'age'

Atribut Kelas Bawaan

Setiap kelas Python terus mengikuti atribut bawaan dan mereka dapat diakses menggunakan operator titik seperti atribut lainnya −

Untuk kelas di atas mari kita coba mengakses semua atribut ini

Demo Langsung
#!/usr/bin/python

class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

print "Employee.__doc__:", Employee.__doc__
print "Employee.__name__:", Employee.__name__
print "Employee.__module__:", Employee.__module__
print "Employee.__bases__:", Employee.__bases__
print "Employee.__dict__:", Employee.__dict__

Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut

Employee.__doc__: Common base class for all employees
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: ()
Employee.__dict__: {'__module__': '__main__', 'displayCount':
<function displayCount at 0xb7c84994>, 'empCount': 2, 
'displayEmployee': <function displayEmployee at 0xb7c8441c>, 
'__doc__': 'Common base class for all employees', 
'__init__': <function __init__ at 0xb7c846bc>}

Menghancurkan Objek (Pengumpulan Sampah)

Python menghapus objek yang tidak dibutuhkan (tipe bawaan atau instance kelas) secara otomatis untuk mengosongkan ruang memori. Proses dimana Python secara berkala mengambil kembali blok memori yang tidak lagi digunakan disebut Pengumpulan Sampah.

Pengumpul sampah Python berjalan selama eksekusi program dan dipicu ketika jumlah referensi objek mencapai nol. Jumlah referensi objek berubah saat jumlah alias yang mengarah ke objek tersebut berubah.

Jumlah referensi objek meningkat ketika diberi nama baru atau ditempatkan dalam wadah (daftar, tupel, atau kamus). Jumlah referensi objek berkurang saat dihapus dengan del , referensinya dipindahkan, atau referensinya keluar dari cakupan. Saat jumlah referensi objek mencapai nol, Python mengumpulkannya secara otomatis.

a = 40      # Create object <40>
b = a       # Increase ref. count  of <40> 
c = [b]     # Increase ref. count  of <40> 

del a       # Decrease ref. count  of <40>
b = 100     # Decrease ref. count  of <40> 
c[0] = -1   # Decrease ref. count  of <40> 

Anda biasanya tidak akan melihat ketika pengumpul sampah menghancurkan instance yatim piatu dan merebut kembali ruangnya. Tetapi sebuah kelas dapat mengimplementasikan metode khusus __del__() , yang disebut destructor, yang dipanggil saat instance akan dimusnahkan. Metode ini mungkin digunakan untuk membersihkan semua sumber daya non-memori yang digunakan oleh sebuah instance.

Contoh

Destruktor __del__() ini mencetak nama kelas dari instance yang akan dimusnahkan −

Demo Langsung
#!/usr/bin/python

class Point:
   def __init__( self, x=0, y=0):
      self.x = x
      self.y = y
   def __del__(self):
      class_name = self.__class__.__name__
      print class_name, "destroyed"

pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts
del pt1
del pt2
del pt3

Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut

3083401324 3083401324 3083401324
Point destroyed

Catatan Idealnya, Anda harus mendefinisikan kelas Anda dalam file terpisah, kemudian Anda harus mengimpornya ke dalam file program utama Anda menggunakan import pernyataan.

Warisan Kelas

Daripada memulai dari awal, Anda dapat membuat kelas dengan menurunkannya dari kelas yang sudah ada sebelumnya dengan mencantumkan kelas induk dalam tanda kurung setelah nama kelas baru.

Kelas anak mewarisi atribut dari kelas induknya, dan Anda dapat menggunakan atribut tersebut seolah-olah mereka didefinisikan di kelas anak. Kelas anak juga dapat menimpa anggota data dan metode dari induknya.

Sintaks

Kelas turunan dideklarasikan seperti kelas induknya; namun, daftar kelas dasar yang akan diwarisi diberikan setelah nama kelas −

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'Optional class documentation string'
   class_suite

Contoh

Demo Langsung
#!/usr/bin/python

class Parent:        # define parent class
   parentAttr = 100
   def __init__(self):
      print "Calling parent constructor"

   def parentMethod(self):
      print 'Calling parent method'

   def setAttr(self, attr):
      Parent.parentAttr = attr

   def getAttr(self):
      print "Parent attribute :", Parent.parentAttr

class Child(Parent): # define child class
   def __init__(self):
      print "Calling child constructor"

   def childMethod(self):
      print 'Calling child method'

c = Child()          # instance of child
c.childMethod()      # child calls its method
c.parentMethod()     # calls parent's method
c.setAttr(200)       # again call parent's method
c.getAttr()          # again call parent's method

Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut

Calling child constructor
Calling child method
Calling parent method
Parent attribute : 200

Cara yang sama, Anda dapat mengarahkan kelas dari beberapa kelas induk sebagai berikut −

class A:        # define your class A
.....

class B:         # define your class B
.....

class C(A, B):   # subclass of A and B
.....

Anda dapat menggunakan fungsi issubclass() atau isinstance() untuk memeriksa hubungan dua kelas dan instance.

Mengganti Metode

Anda selalu dapat mengganti metode kelas induk Anda. Salah satu alasan untuk mengganti metode induk adalah karena Anda mungkin menginginkan fungsionalitas khusus atau berbeda di subkelas Anda.

Contoh

Demo Langsung
#!/usr/bin/python

class Parent:        # define parent class
   def myMethod(self):
      print 'Calling parent method'

class Child(Parent): # define child class
   def myMethod(self):
      print 'Calling child method'

c = Child()          # instance of child
c.myMethod()         # child calls overridden method

Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut

Calling child method

Metode Kelebihan Beban Dasar

Tabel berikut mencantumkan beberapa fungsi umum yang dapat Anda timpa di kelas Anda sendiri −

No.No. Metode, Deskripsi &Contoh Panggilan
1

__init__ ( diri [,args...] )

Konstruktor (dengan argumen opsional apa pun)

Contoh Panggilan :obj =className(args)

2

__del__( sendiri )

Destructor, menghapus objek

Contoh Panggilan :del obj

3

__repr__( mandiri )

Representasi string yang dapat dievaluasi

Contoh Panggilan :repr(obj)

4

__str__( sendiri )

Representasi string yang dapat dicetak

Contoh Panggilan :str(obj)

5

__cmp__ ( sendiri, x )

Perbandingan objek

Contoh Panggilan :cmp(obj, x)

Operator Kelebihan Beban

Misalkan Anda telah membuat kelas Vektor untuk mewakili vektor dua dimensi, apa yang terjadi ketika Anda menggunakan operator plus untuk menambahkannya? Kemungkinan besar Python akan meneriaki Anda.

Namun, Anda dapat menentukan __add__ metode di kelas Anda untuk melakukan penjumlahan vektor dan kemudian operator plus akan berperilaku sesuai harapan −

Contoh

Demo Langsung
#!/usr/bin/python

class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b

   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2,10)
v2 = Vector(5,-2)
print v1 + v2

Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut

Vector(7,8)

Penyembunyikan Data

Atribut objek mungkin atau mungkin tidak terlihat di luar definisi kelas. Anda perlu memberi nama atribut dengan awalan garis bawah ganda, dan atribut tersebut tidak dapat dilihat langsung oleh orang luar.

Contoh

Demo Langsung
#!/usr/bin/python

class JustCounter:
   __secretCount = 0
  
   def count(self):
      self.__secretCount += 1
      print self.__secretCount

counter = JustCounter()
counter.count()
counter.count()
print counter.__secretCount

Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut

1
2
Traceback (most recent call last):
   File "test.py", line 12, in <module>
      print counter.__secretCount
AttributeError: JustCounter instance has no attribute '__secretCount'

Python melindungi anggota tersebut dengan mengubah nama secara internal untuk memasukkan nama kelas. Anda dapat mengakses atribut seperti object._className__attrName . Jika Anda akan mengganti baris terakhir Anda sebagai berikut, maka itu akan berhasil untuk Anda

.........................
print counter._JustCounter__secretCount

Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut

1
2
2

Python

  1. C# Kelas dan Objek
  2. Tipe Data Python
  3. Operator Python
  4. Pernyataan lulus python
  5. Kamus Python
  6. Pengecualian Kustom Python
  7. Pemrograman Berorientasi Objek Python
  8. Warisan Python
  9. Kelas Tunggal Jawa
  10. Pelacakan Objek Penglihatan Otomatis