Class và đối tượng trong Python - Python with PyQt5



Class và ??i t??ng trong Python1- H??ng ??i t??ng trong Python 2- T?o class trong Python 3- Tham s? có m?c ??nh trong Constructor 4- So sánh các ??i t??ng 5- Thu?c tính (Attribute) 6- Các hàm truy c?p vào thu?c tính 7- Các thu?c tính có s?n c?a class 8- Bi?n c?a l?p 9- Li?t kê danh sách các thành viên c?a l?p ho?c ??i t??ng 10- H?y ??i t??ng 1- H??ng ??i t??ng trong Python Python là m?t ng?n ng? l?p trình h??ng th? t?c (Procedural-oriented), ??ng th?i nó c?ng là ng?n ng? l?p trình h??ng ??i t??ng (Object Oriented). H??ng th? t?c (Procedural-oriented)H??ng th? t?c bi?u hi?n ? vi?c s? d?ng các hàm trong Python. B?n có th? ??nh ngh?a các hàm, và các hàm này có th? s? d?ng t?i các module khác trong ch??ng trình Python. H??ng ??i t??ng (Object Oriented)H??ng ??i t??ng trong Python bi?u hi?n ? vi?c s? d?ng l?p (class), b?n có th? ??nh ngh?a m?t class, class là m?t nguyên m?u (prototype) ?? t?o ra các ??i t??ng (object/instance). 2- T?o class trong Python Cú pháp t?o m?t class: ** class syntax ** class ClassName: 'M? t? ng?n v? class (Kh?ng b?t bu?c)' # Code ...?? ??nh ngh?a m?t l?p b?n s? d?ng t? khóa class, ti?p sau ?ó là tên c?a l?p và d?u hai ch?m ( : ). Dòng ??u tiên trong th?n c?a l?p là chu?i (string) m? t? ng?n g?n v? l?p này (Kh?ng b?t bu?c), b?n có th? truy c?p vào chu?i này th?ng qua ClassName.__doc__ .Trong th?n c?a l?p b?n có th? khai báo các thu?c tính, ph??ng th?c (method) và các ph??ng th?c kh?i t?o (Constructor).Thu?c tính (Attribute):Thu?c tính là m?t thành viên thành viên c?a l?p. Ch?ng h?n hình ch? nh?t có hai thu?c tính width và height (Chi?u r?ng và chi?u cao). Ph??ng th?c (Method):Ph??ng th?c c?a class nó t??ng t? nh? m?t hàm th?ng th??ng, nh?ng nó là m?t hàm c?a class, ?? s? d?ng nó b?n c?n ph?i g?i th?ng qua ??i t??ng.Tham s? ??u tiên c?a ph??ng th?c lu?n là self (M?t t? khóa ám ch? chính class ?ó).Ph??ng th?c kh?i t?o (Constructor):Ph??ng th?c kh?i t?o (Constructor) là m?t ph??ng th?c ??c bi?t c?a l?p (class), nó lu?n có tên là __init__Tham s? ??u tiên c?a constructor lu?n là self (M?t t? khóa ám ch? chính class ?ó).Constructor ???c s? d?ng ?? t?o ra m?t ??i t??ng.Constructor gán các giá tr? t? tham s? vào các thu?c tính c?a ??i t??ng s? ???c t?o ra.B?n ch? có th? ??nh ngh?a nhi?u nh?t m?t ph??ng th?c kh?i t?o (constructor) trong class.N?u class kh?ng ???c ??nh ngh?a constructor, Python m?c ??nh coi r?ng nó th?a k?t t? constructor c?a l?p cha.rectangle.py # Class m? ph?ng m?t hình ch? nh?t.class Rectangle : 'This is Rectangle class' # Ph??ng th?c t?o ??i t??ng (Contructor) def __init__(self, width, height): self.width= width self.height = height def getWidth(self): return self.width def getHeight(self): return self.height # Ph??ng th?c tính di?n tích def getArea(self): return self.width * self.height T?o ??i t??ng t? l?p Rectangle: from rectangle import Rectangle# T?o 2 ??i t??ng: r1 & r2r1 = Rectangle(10,5)r2 = Rectangle(20,11)print ("r1.width = ", r1.width)print ("r1.height = ", r1.height)print ("r1.getWidth() = ", r1.getWidth())print ("r1.getArea() = ", r1.getArea())print ("-----------------")print ("r2.width = ", r2.width)print ("r2.height = ", r2.height)print ("r2.getWidth() = ", r2.getWidth())print ("r2.getArea() = ", r2.getArea())?i?u gì x?y ra khi b?n t?o ??i t??ng t? m?t class?Khi b?n t?o m?t ??i t??ng c?a l?p Rectangle, ph??ng th?c kh?i t?o (constructor) c?a class ?ó s? ???c g?i ?? t?o m?t ??i t??ng, và các thu?c tính c?a ??i t??ng s? ???c gán giá tr? t? tham s?. Nó gi?ng v?i hình minh h?a d??i ??y: 3- Tham s? có m?c ??nh trong Constructor Khác v?i các ng?n ng? khác, l?p trong Python ch? có nhi?u nh?t m?t ph??ng th?c kh?i t?o (Constructor). Tuy nhiên Python cho phép tham s? có giá tr? m?c ??nh. Chú ?: T?t c? các tham s? b?t bu?c (required parameters) ph?i ??t tr??c t?t c? các tham s? có giá tr? m?c ??nh. person.py class Person : # Tham s? age, gender có giá tr? m?c ??nh def __init__ (self, name, age = 1, gender = "Male" ): self.name = name self.age = age self.gender= gender def showInfo(self): print ("Name: ", self.name) print ("Age: ", self.age) print ("Gender: ", self.gender) Ví d? s? d?ng: testPerson.py from person import Person # T?o m?t ??i t??ng Personaimee = Person("Aimee", 21, "Female")aimee.showInfo()print (" --------------- ")# age, gender m?c ??nhalice = Person( "Alice" )alice.showInfo()print (" --------------- ")# gender m?c ??nhtran = Person("Tran", 37)tran.showInfo() 4- So sánh các ??i t??ng Trong Python, khi b?n t?o m?t ??i t??ng th?ng qua ph??ng th?c kh?i t?o (Constructor), s? có m?t th?c th? th?c s? ???c t?o ra n?m trên b? nh?, nó có m?t ??a ch? xác ??nh. M?t phép toán gán ??i t??ng AA b?i m?t ??i t??ng BB kh?ng t?o ra thêm th?c th? trên b? nh?, nó ch? là tr? ??a ch? c?a AA t?i ??a ch? c?a BB. Toán t? == dùng ?? so sánh ??a ch? 2 ??i t??ng tr? ??n, nó tr? v? True n?u c? 2 ??i t??ng cùng tr? t?i cùng m?t ??a ch? trên b? nh?. Toán t? != c?ng s? d?ng ?? so sánh 2 ??a ch? c?a 2 ??i t??ng tr? ??n, nó tr? v? True n?u 2 ??i t??ng tr? t?i 2 ??a ch? khác nhau. compareObject.py from rectangle import Rectangler1 = Rectangle(20, 10)r2 = Rectangle(20 , 10)r3 = r1 # So sánh ??a ch? c?a r1 và r2test1 = r1 == r2 # --> False # So sánh ??a ch? c?a r1 và r3test2 = r1 == r3 # --> Trueprint ("r1 == r2 ? ", test1)print ("r1 == r3 ? ", test2)print (" -------------- ")print ("r1 != r2 ? ", r1 != r2)print ("r1 != r3 ? ", r1 != r3)5- Thu?c tính (Attribute) Trong Python có 2 khái ni?m khá gi?ng nhau, b?n c?n ph?i ph?n bi?t nó: Thu?c tính (Attribute)Bi?n c?a l?p?? ??n gi?n, h?y ph?n tích ví d? d??i ??y: player.py class Player: # Bi?n c?a l?p minAge = 18 maxAge = 50 def __init__(self, name, age): self.name = name self.age = age Thu?c tính (Attribute)Các ??i t??ng ???c t?o ra t? m?t l?p, chúng s? n?m t?i các ??a ch? khác nhau trên b? nh? (memory), và các thu?c tính "cùng tên" c?a chúng c?ng có các ??a ch? khác nhau trên b? nh?. Nh? hình minh h?a d??i ??y: testAttributePlayer.py from player import Playerplayer1 = Player("Tom", 20)player2 = Player("Jerry", 20)print ("player1.name = ", player1.name)print ("player1.age = ", player1.age)print ("player2.name = ", player2.name)print ("player2.age = ", player2.age)print (" ------------ ")print ("Assign new value to player1.age = 21 ")# Gán giá tr? m?i cho thu?c tính age c?a player1player1.age = 21print ("player1.name = ", player1.name)print ("player1.age = ", player1.age)print ("player2.name = ", player2.name)print ("player2.age = ", player2.age) Python cho phép t?o ra m?t thu?c tính m?i cho m?t ??i t??ng có tr??c. Ví d? ??i t??ng player1 và thu?c tính m?i có tên address. testNewAttributePlayer.py from player import Playerplayer1 = Player("Tom", 20)player2 = Player("Jerry", 20)# T?o m?t thu?c tính có tên address cho player1player1.address = "USA"print ("player1.name = ", player1.name)print ("player1.age = ", player1.age)print ("player1.address = ", player1.address)print (" ------------------- ")print ("player2.name = ", player2.name)print ("player2.age = ", player2.age)# player2 kh?ng có thu?c tính address (L?i x?y ra t?i ??y)print ("player2.address = ", player2.address)6- Các hàm truy c?p vào thu?c tính Th?ng th??ng b?n truy c?p vào thu?c tính c?a m?t ??i t??ng th?ng qua toán t? "d?u ch?m" (Ví d? player1.name). Tuy nhiên Python cho phép b?n truy c?p chúng th?ng qua hàm (function). HàmM? t?getattr(obj, name[, default])Tr? v? giá tr? c?a thu?c tính, ho?c tr? v? giá tr? m?c ??nh n?u ??i t??ng kh?ng có thu?c tính này.hasattr(obj,name)Ki?m tra xem ??i t??ng này có thu?c tính cho b?i tham s? 'name' hay kh?ng.setattr(obj,name,value)Sét giá tr? vào thu?c tính. N?u thu?c tính kh?ng t?n t?i, thì nó s? ???c t?o ra.delattr(obj, name)Xóa b? thu?c tính.testAttFunctions.py from player import Playerplayer1 = Player("Tom", 20)# getattr(obj, name[, default])print ("getattr(player1,'name') = " , getattr(player1,"name") )print ("setattr(player1,'age', 21): ")# setattr(obj,name,value)setattr(player1,"age", 21)print ("player1.age = ", player1.age)# Ki?m tra player1 có thu?c tính address?hasAddress = hasattr(player1, "address")print ("hasattr(player1, 'address') ? ", hasAddress)# T?o thu?c tính 'address' cho ??i t??ng 'player1'.print ("Create attribute 'address' for object 'player1'")setattr(player1, 'address', "USA")print ("player1.address = ", player1.address)# Xóa b? thu?c tính 'address'delattr(player1, "address") 7- Các thu?c tính có s?n c?a class Các l?p c?a Python ??u là h?u du? c?a l?p object. Và vì v?y nó th?a k? các thu?c tính sau: Thu?c tínhM? t?__dict__Th?ng tin v? class này ???c bi?u di?n ng?n g?n d? hi?u, nh? m?t b? t? ?i?n (Dictionary)__doc__Tr? v? chu?i m? t? v? class, ho?c tr? v? None n?u nó kh?ng ???c ??nh ngh?a__class__Tr? v? m?t ??i t??ng, ch?a th?ng tin v? l?p, ??i t??ng này có nhi?u thu?c tính có ích, trong ?ó có thu?c tính __name__.__module__Tr? v? tên module c?a l?p, ho?c tr? v? "__main__" n?u l?p ?ó ???c ??nh ngh?a trong module ?ang ???c ch?y.testBuildInAttributes.py class Customer : 'This is Customer class' def __init__(self, name, phone, address): self.name = name self.phone = phone self.address = addressjohn = Customer("John",1234567, "USA")print ("john.__dict__ = ", john.__dict__)print ("john.__doc__ = ", john.__doc__)print ("john.__class__ = ", john.__class__)print ("john.__class__.__name__ = ", john.__class__.__name__) print ("john.__module__ = ", john.__module__) 8- Bi?n c?a l?p Trong Python khái ni?m "Bi?n c?a l?p (Class's Variable)" t??ng ???ng v?i khái ni?m tr??ng t?nh (Static Field) c?a các ng?n ng? khác nh? Java, CSharp. Bi?n c?a l?p có th? ???c truy c?p th?ng qua tên l?p ho?c th?ng qua ??i t??ng. ? L?i khuyên là b?n nên truy c?p "bi?n c?a l?p" th?ng qua tên l?p thay vì truy c?p th?ng qua ??i t??ng. ?i?u này giúp tránh nh?m l?n gi?a "bi?n c?a l?p" và thu?c tính. M?i bi?n c?a l?p, có m?t ??a ch? n?m trên b? nh? (memory). Và chia s? cho m?i ??i t??ng c?a l?p. ? testVariablePlayer.py from player import Playerplayer1 = Player("Tom", 20)player2 = Player("Jerry", 20)# Truy c?p th?ng qua tên l?pprint ("Player.minAge = ", Player.minAge) # Truy c?p th?ng qua ??i t??ngprint ("player1.minAge = ", player1.minAge)print ("player2.minAge = ", player2.minAge)print (" ------------ ")print ("Assign new value to minAge via class name, and print..")# Thay ??i giá tr? bi?n minAge th?ng qua tên l?pPlayer.minAge = 19print ("Player.minAge = ", Player.minAge)print ("player1.minAge = ", player1.minAge)print ("player2.minAge = ", player2.minAge) 9- Li?t kê danh sách các thành viên c?a l?p ho?c ??i t??ng Python cung c?p cho b?n hàm dir, hàm này li?t kê ra danh sách các ph??ng th?c, thu?c tính, bi?n c?a l?p ho?c c?a ??i t??ng. ? testDirFunction.py from player import Player# In ra danh sách các thu?c tính, ph??ng th?c, bi?n c?a class Player.print ( dir(Player) )print ("\n\n")player1 = Player("Tom", 20)player1.address ="USA"# In ra danh sách các thu?c tính, ph??ng th?c, bi?n c?a ??i t??ng 'player1'print ( dir(player1) )Ch?y ví d?: ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'maxAge', 'minAge'] ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'address', 'age', 'maxAge', 'minAge', 'name'] ? 10- H?y ??i t??ng ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download