Thuộc tính lớp vs. thuộc tính thể hiện

Nhập môn Lập trình Hướng đối tượng với Python

George Boorman

Curriculum Manager, DataCamp

Các nguyên tắc cốt lõi của OOP

Đóng gói:

  • Gộp dữ liệu và phương pháp

Kế thừa:

  • Mở rộng chức năng của mã hiện có

Đa hình:

  • Tạo giao diện thống nhất
Nhập môn Lập trình Hướng đối tượng với Python

Thuộc tính cấp phiên bản

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • namesalary là giá trị riêng cho từng đối tượng
  • self gán cho một đối tượng
Nhập môn Lập trình Hướng đối tượng với Python

Thuộc tính cấp lớp

  • Dữ liệu được chia sẻ giữa tất cả các thể hiện của một lớp
  • Định nghĩa thuộc tính lớp trong phần thân của class
  • "Biến toàn cục" trong lớp
Nhập môn Lập trình Hướng đối tượng với Python

Triển khai thuộc tính cấp lớp

class Employee:
    # Define a class attribute
    # No self. syntax
    MIN_SALARY = 30000 

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary
else: self.salary = Employee.MIN_SALARY
  • MIN_SALARY được chia sẻ giữa tất cả các phiên bản
  • Đừng dùng self để định nghĩa thuộc tính lớp
  • Quy ước là dùng chữ hoa
  • Dùng ClassName.ATTR_NAME để truy cập giá trị thuộc tính lớp
Nhập môn Lập trình Hướng đối tượng với Python

Thuộc tính cấp lớp

class Employee:
    # Define a class attribute
    MIN_SALARY = 30000    

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary else: self.salary = Employee.MIN_SALARY
emp1 = Employee("John", 40000)
print(emp1.MIN_SALARY)
30000
emp2 = Employee("Jane", 60000)
print(emp2.MIN_SALARY)
30000
Nhập môn Lập trình Hướng đối tượng với Python

Sửa đổi thuộc tính cấp lớp

emp1 = Employee("John", 40000)
emp2 = Employee("Jane", 60000)

# Update MIN_SALARY of emp1 emp1.MIN_SALARY = 50000
# Print MIN_SALARY for both employees print(emp1.MIN_SALARY) print(emp2.MIN_SALARY)
50000
30000
Nhập môn Lập trình Hướng đối tượng với Python

Sửa đổi thuộc tính cấp lớp

  • MIN_SALARY được tạo trong định nghĩa lớp
  • Cập nhật MIN_SALARY của một đối tượng sẽ không ảnh hưởng đến giá trị trong định nghĩa lớp
  • Bảo mật - ngăn chặn việc thay đổi phần mềm!
Nhập môn Lập trình Hướng đối tượng với Python

Tại sao nên dùng thuộc tính lớp?

Các hằng số toàn cục liên quan đến lớp
  • Giá trị tối thiểu và tối đa cho thuộc tính
    • Ngăn chặn dữ liệu không hợp lệ
  • Các giá trị và hằng số thường dùng, ví dụ host, port cho một lớp Database
    • Tránh lặp lại khi tạo đối tượng
Nhập môn Lập trình Hướng đối tượng với Python

Hãy luyện tập!

Nhập môn Lập trình Hướng đối tượng với Python

Preparing Video For Download...