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

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

George Boorman

Curriculum Manager, DataCamp

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

  • Phương thức là các định nghĩa hàm trong một lớp
  • self với tư cách là đối số đầu tiên
  • Định nghĩa thuộc tính bằng phép gán
  • Tham chiếu đến các thuộc tính trong lớp qua self.___
  • Gọi quá nhiều phương thức có thể trở nên không bền vững!
class MyClass:
    # function definition in class
    # first argument is self
    def my_method1(self, other_args...):
        # do things here

def my_method2(self, my_attr): # attribute created by assignment self.my_attr = my_attr ...
Nhập môn Lập trình Hướng đối tượng với Python

Hàm tạo

  • Thêm dữ liệu vào đối tượng khi tạo đối tượng
  • Phương thức Constructor __init__() được gọi mỗi khi một đối tượng được tạo
    • Được gọi tự động vì cú pháp __methodname__
class Customer:
    def __init__(self, name):
        # Create the .name attribute and set it to name parameter
        self.name = name
        print("The __init__ method was called")
Nhập môn Lập trình Hướng đối tượng với Python

Hàm tạo

# __init__ is implicitly called 
cust = Customer("Lara de Silva")   
print(cust.name)
The __init__ method was called
Lara de Silva
Nhập môn Lập trình Hướng đối tượng với 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() # attr1 created obj.my_method1(val1) # attr2 created obj.my_method2(val2)

Các thuộc tính trong hàm tạo

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

# All attributes are created obj = MyClass(val1, val2)
  • Nói chung, chúng ta nên sử dụng constructor
  • Thuộc tính được tạo khi đối tượng được tạo
  • Mã nguồn dễ dùng và dễ bảo trì hơn
Nhập môn Lập trình Hướng đối tượng với Python

Thêm đối số

class Customer:
    # Add balance argument
    def __init__(self, name, balance): 

self.name = name # Add the balance attribute self.balance = balance print("The __init__ method was called")
Nhập môn Lập trình Hướng đối tượng với Python

Thêm tham số

# __init__ is called
cust = Customer("Lara de Silva", 1000)
print(cust.name)
print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Nhập môn Lập trình Hướng đối tượng với Python

Đối số mặc định

class Customer:
    # Set a default value for balance
    def __init__(self, name, balance=0):
        self.name = name
        # Assign the new attribute
        self.balance = balance
        print("The __init__ method was called")
Nhập môn Lập trình Hướng đối tượng với Python

Đối số mặc định

# Don't specify the balance explicitly
cust = Customer("Lara de Silva")

print(cust.name) # The balance attribute is created anyway print(cust.balance)
The __init__ method was called
Lara de Silva
0
Nhập môn Lập trình Hướng đối tượng với Python

Các phương pháp luyện tập tốt nhất

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

Các phương pháp hay nhất

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

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

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

Các phương pháp hay nhất

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

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

3. Giữ self dưới dạng self
class MyClass:
    # This works but isn't recommended
    def my_method(george, attr):
        george.attr = attr
Nhập môn Lập trình Hướng đối tượng với Python

Các phương pháp hay nhất

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

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

3. selfself
4. Dùng docstrings
class MyClass:
    """This class does nothing"""
    pass
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...