Lớp Python cần khởi tạo (instantiate), hoặc gọi, trước khi truy cập phương thức. Nếu quên khởi tạo đối tượng lớp và cố truy cập phương thức lớp, gặp lỗi "missing 1 required positional argument: 'self'".
Trong hướng dẫn này, nói về ý nghĩa lỗi và tại sao nêu lên. Chúng ta đi qua ví dụ lỗi hành động giúp bạn học cách khắc phục.
missing 1 required positional argument: 'self'
Positional arguments tham chiếu dữ liệu truyền vào hàm. Trong lớp, mọi hàm phải cho giá trị "self". Giá trị "self" giống "this" JavaScript. "self" đại diện dữ liệu lưu trong đối tượng lớp.
Khi gọi phương thức lớp không khởi tạo đối tượng lớp trước, gặp lỗi. Vì "self" không giá trị cho đến khi đối tượng khởi tạo.
Lỗi thường gặp gây "missing 1 required positional argument: 'self'":
- Quên khởi tạo đối tượng lớp
- Dùng cú pháp sai khởi tạo lớp
Hãy đi qua từng nguyên nhân.
Nguyên nhân #1: Quên khởi tạo đối tượng
Đối tượng phải khởi tạo trước truy cập phương thức lớp.
Định nghĩa lớp lưu thông tin hero game:
81% người tham gia cho biết họ cảm thấy tự tin hơn về cơ hội việc làm công nghệ sau khi tham gia bootcamp. Được ghép nối với bootcamp ngay hôm nay.
Sinh viên trung bình tốt nghiệp bootcamp mất chưa đến sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được việc đầu tiên.
class Hero: def __init__(self, name, player_type): self.name = name self.player_type = player_type
Tiếp theo, thêm hàm lớp. Hàm bên trong lớp gọi phương thức (method). Phương thức in tên người chơi và loại:
def show_player(self): print("Player Name: " + self.name) print("Player Type: " + self.player_type) Thử truy cập lớp tạo người chơi:
luke = Hero.show_player()
Tạo đối tượng gán "luke". Đối tượng từ Hero. Gọi show_player() hiển thị thông tin người chơi.
Hãy chạy mã toàn bộ xem:
Traceback (most recent call last): File "main.py", line 10, in <module> luke = Hero.show_player() TypeError: show_player() missing 1 required positional argument: 'self'
Mã thất bại. Vì chưa khởi tạo đối tượng Hero. Hero.show_player() không hoạt động vì chưa tạo Hero thông tin hiển thị.
Khắc phục bằng khởi tạo đối tượng trước gọi show_player():
luke = Hero("Luke", "Mage") luke.show_player() Chạy mã lại:
Player Name: Luke Player Type: Mage
Mã chạy thành công! Đã khai báo "luke" lưu thông tin người chơi Luke. Loại người chơi "Mage". Giờ đã khởi tạo đối tượng, gọi show_player().
Nguyên nhân #2: Khởi tạo lớp sai cú pháp
Lỗi "missing 1 required positional argument: 'self'" xảy ra khi khởi tạo lớp sai. Xem mã:
luke = Hero luke.show_player()
Mặc dù mã giống giải pháp trước, nó sai. Vì không thêm ngoặc đơn sau Hero. Thiếu ngoặc, chương trình không biết muốn khởi tạo lớp.
Khắc phục bằng thêm ngoặc đơn Hero và chỉ định đối số bắt buộc, "name" và "player_type":
luke = Hero("Luke", "Mage") luke.show_player() Mã giờ chạy thành công trả thông tin người chơi:
Player Name: Luke Player Type: Mage
Kết luận
Lỗi "missing 1 required positional argument: 'self'" nêu lên khi không khởi tạo đối tượng lớp trước gọi phương thức. Lỗi cũng nêu khi khởi tạo lớp sai cú pháp.
Khắc phục bằng đảm bảo trước khởi tạo đối tượng lớp trước khi truy cập phương thức lớp. Sau đó, kiểm tra cú pháp đúng khởi tạo đối tượng.
Bây giờ bạn đã sẵn sàng giải quyết lỗi phổ biến này như chuyên gia Python!