Giải phẫu lớp: hàm khởi tạo __init__

Lập trình hướng đối tượng trong Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Phương thức và thuộc tính

  • Phương thức là hàm được định nghĩa trong lớp
  • self là đối số đầu tiên
  • Tạo thuộc tính bằng phép gán
  • Tham chiếu thuộc tính trong lớp qua self.___

   

class MyClass:
    # định nghĩa hàm trong lớp
    # đối số đầu tiên là self
    def my_method1(self, other_args...):
        # xử lý tại đây

    def my_method2(self, my_attr):        
        # tạo thuộc tính bằng phép gán
        self.my_attr = my_attr
        ...
Lập trình hướng đối tượng trong Python

Hàm khởi tạo

  • Thêm dữ liệu vào đối tượng khi tạo?
  • Phương thức constructor __init__() được gọi mỗi khi một đối tượng được tạo.
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- Tạo thuộc tính .name và gán từ tham số name
        print("The __init__ method was called")

cust = Customer("Lara de Silva") #<--- __init__ được gọi ngầm print(cust.name)
The __init__ method was called
Lara de Silva
Lập trình hướng đối tượng trong Python
class Customer:
       def __init__(self, name, balance):  # <-- thêm tham số balance

self.name = name self.balance = balance # <-- thêm thuộc tính balance print("The __init__ method was called")
cust = Customer("Lara de Silva", 1000) # <-- __init__ được gọi print(cust.name) print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Lập trình hướng đối tượng trong Python
class Customer:
       def __init__(self, name, balance=0):  #<-- đặt giá trị mặc định cho balance

self.name = name self.balance = balance print("The __init__ method was called")
cust = Customer("Lara de Silva") # <-- không truyền balance
print(cust.name) print(cust.balance) # <-- thuộc tính vẫn được tạo
The __init__ method was called
Lara de Silva
0
Lập trình hướng đối tượng trong Python

Thuộc tính trong phương thức

class MyClass:
    def my_method1(self, attr1):
        self.attr1 = attr1
        ...

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...
obj = MyClass()
obj.my_method1(val1) # <-- tạo attr1
obj.my_method2(val2) # <-- tạo attr2

Thuộc tính trong hàm khởi tạo

class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        ...

# Tất cả thuộc tính được tạo obj = MyClass(val1, val2)
  • dễ biết toàn bộ thuộc tính
  • thuộc tính được tạo khi đối tượng được tạo
  • mã dễ dùng và bảo trì hơn
Lập trình hướng đối tượng trong Python

Thực hành tốt

1. Khởi tạo thuộc tính trong __init__()
Lập trình hướng đối tượng trong Python

Thực hành tốt

1. Khởi tạo thuộc tính trong __init__()
2. Quy tắc đặt tên

CamelCase cho lớp, lower_snake_case cho hàm và thuộc tính

Lập trình hướng đối tượng trong Python

Thực hành tốt

1. Khởi tạo thuộc tính trong __init__()
2. Quy tắc đặt tên

CamelCase cho lớp, lower_snake_case cho hàm và thuộc tính

3. Giữ selfself
class MyClass:
    # Làm được nhưng không khuyến nghị
    def my_method(kitty, attr):
       kitty.attr = attr
Lập trình hướng đối tượng trong Python

Thực hành tốt

1. Khởi tạo thuộc tính trong __init__()
2. Quy tắc đặt tên

CamelCase cho lớp, lower_snake_case cho hàm và thuộc tính

3. selfself
4. Dùng docstring
class MyClass:
    """Lớp này không làm gì"""
    pass
Lập trình hướng đối tượng trong Python

Ayo berlatih!

Lập trình hướng đối tượng trong Python

Preparing Video For Download...