Trịnh Tấn Đạt Đại Học Sài Gòn trinhtandatsgu edu vn http sites google comsitettdat88 Nội Dung Introduction Namespaces and Dataclasses Classes in Python Inheritance in Python Multiple Inheritance Operator Overloading Example OOP Trong Python, khái niệm về OOP tuân theo một số nguyên lý cơ bản là tính đóng gói, tính kế thừa và tính đa hình Tính kế thừa (Inheritance) cho phép một lớp (class) có thể kế thừa các thuộc tính và phương thức từ các lớp khác đã được định nghĩa Tín.
Trịnh Tấn Đạt Đại Học Sài Gòn trinhtandat@sgu.edu.vn http://sites.google.com/site/ttdat88 Nội Dung Introduction Namespaces and Dataclasses Classes in Python Inheritance in Python Multiple Inheritance Operator Overloading Example OOP Trong Python, khái niệm OOP tuân theo số nguyên lý tính đóng gói, tính kế thừa tính đa hình Tính kế thừa (Inheritance): cho phép lớp (class) kế thừa thuộc tính phương thức từ lớp khác định nghĩa Tính đóng gói (Encapsulation): quy tắc yêu cầu trạng thái bên đối tượng bảo vệ tránh truy cập từ code bên ngoai Tính đa hình (Polymorphism): khái niệm mà hai nhiều lớp có phương thức giống thực thi theo cách thức khác Lớp (Class) Đối tượng (Object) Đối tượng (Object) thực thể tồn có hành vi Lớp (Class) kiểu liệu đặc biệt người dùng định nghĩa, tập hợp nhiều thuộc tính đặc trưng cho đối tượng tạo từ lớp Một đối tượng thực thể (instance) lớp Phương thức (Method) hàm định nghĩa bên phần thân lớp Chúng sử dụng để xác định hành vi đối tượng Kế thừa (Inheritance) Tính kế thừa cho phép lớp (class) kế thừa thuộc tính phương thức từ lớp khác định nghĩa Lớp có gọi lớp cha, lớp phát sinh gọi lớp Lớp kế thừa tất thành phần lớp cha, mở rộng thành phần kế thừa bổ sung thêm thành phần Đóng gói (Encapsulation) Sử dụng OOP Python, hạn chế quyền truy cập vào trạng thái bên đối tượng Điều ngăn chặn liệu bị sửa đổi trực tiếp, gọi đóng gói Trong Python, biểu thị thuộc tính private cách sử dụng dấu gạch làm tiền tố: “_” “ “ Đa hình (Polymorphism) Tính đa hình khái niệm mà hai nhiều lớp có phương thức giống thực thi theo cách thức khác Giả sử, cần tơ màu hình khối, có nhiều lựa chọn cho hình bạn hình chữ nhật, hình vng, hình trịn Tuy nhiên, bạn sử dụng phương pháp để tơ màu hình dạng Methods vs Functions Các phương thức (method) thường sử dụng s.f() thay f(s) s = 'hello world!' print(len(s)) # len hàm print(s.upper()) # upper is a string method, called using the notation # gọi phương thức upper cho chuỗi s print(s.replace('hello', 'hi')) # vài method có thêm đối số Methods vs Functions Ví dụ lỗi cách sử dụng method function không n = 123 print(len(n)) # TypeError: object of type 'int' has no len() n = 123 print(n.upper()) # AttributeError: 'int' object has no attribute 'upper’ Classes and Instances Classes thường gọi "Types" Python Ví dụ classes int, float, str, bool Instances giá trị cụ thể class kiểu định Ví dụ ‘hello’ thực thể string (hay gọi string) x = print(type(x)) print(type('hello')) # # Tương tự vậy, bạn nạp chồng nhiều tốn tử khác Ví dụ: Overloading Comparison Operators Python khơng giới hạn phép nạp chồng toán tử tốn học, mà cịn cho phép người dùng nạp chồng tốn tử so sánh Có nhiều tốn tử so sánh hỗ trợ Python, ví dụ như: , =, ==, Bạn sử dụng nạp chồng toán tử muốn so sánh đối tượng lớp với Ví dụ: Ví dụ bạn muốn so sánh điểm class Point, so sánh độ lớn điểm gốc tọa độ, # overloading the less than operator class Point: def init (self, x=0, y=0): self.x = x self.y = y def str (self): return "({0},{1})".format(self.x, self.y) def lt (self, other): self_mag = (self.x ** 2) + (self.y ** 2) other_mag = (other.x ** 2) + (other.y ** 2) return self_mag < other_mag p1 = Point(1,1) p2 = Point(-2,-3) p3 = Point(1,-1) # use less than print(p1 > print(harry.greet) # Calling object' s greet() method # Output: Hello harry.greet() Ví dụ: # Create our own class: # Tất lớp Python điều kết thừa từ lớp object (class object) ... cách sử dụng method function không n = 1 23 print(len(n)) # TypeError: object of type 'int' has no len() n = 1 23 print(n.upper()) # AttributeError: 'int' object has no attribute 'upper’ Classes... self.age = age Tham chiếu self self giống this ngôn ngữ hướng đối tượng khác Đối với ngơn ngữ khác khơng cần phải truyền this self vào Nhưng Python yêu cầu phải Các tham số self tham chiếu