Các lớp Python cần phải được khởi tạo hoặc được gọi, trước khi bạn có thể truy cập các phương thức của chúng. Nếu bạn quên khởi tạo một đối tượng của một lớp và cố gắng truy cập vào một phương thức của lớp, bạn sẽ gặp phải lỗi nói rằng “thiếu 1 đối số vị trí bắt buộc:‘ self ’”.
Trong hướng dẫn này, chúng tôi nói về lỗi này có nghĩa là gì và tại sao nó lại xuất hiện. Chúng tôi đi qua một ví dụ về lỗi này trong thực tế để giúp bạn tìm hiểu cách khắc phục nó.
thiếu 1 đối số vị trí bắt buộc:'self'
Các đối số vị trí tham chiếu đến dữ liệu được truyền vào một hàm. Trong một lớp, mọi hàm phải có giá trị là “self”. Giá trị của “self” tương tự như “this” trong JavaScript. “Self” đại diện cho dữ liệu được lưu trữ trong một đối tượng của một lớp.
Khi bạn gọi một phương thức lớp mà không khởi tạo trước một đối tượng của lớp đó, bạn sẽ gặp lỗi. Điều này là do “bản thân” không có giá trị cho đến khi một đối tượng đã được khởi tạo.
Các lỗi phổ biến nhất gây ra lỗi "thiếu 1 đối số vị trí bắt buộc:" self "" là:
- Quên khởi tạo một đối tượng của một lớp
- Sử dụng cú pháp không chính xác để khởi tạo một lớp
Hãy xem xét từng nguyên nhân riêng lẻ.
Nguyên nhân số 1:Quên khởi tạo đối tượng
Một đối tượng phải được khởi tạo trước khi bạn có thể truy cập một phương thức trong một lớp.
Xác định một lớp lưu trữ thông tin về một anh hùng trong trò chơi điện tử:
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia chương trình đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
class Hero: def __init__(self, name, player_type): self.name = name self.player_type = player_type
Tiếp theo, chúng ta thêm một hàm vào lớp của chúng ta. Các hàm bên trong các lớp được gọi là các phương thức. Phương pháp này in ra tên của một người chơi và loại người chơi của họ:
def show_player(self): print("Player Name: " + self.name) print("Player Type: " + self.player_type)
Cố gắng truy cập lớp học của chúng tôi để chúng tôi có thể tạo trình phát:
luke = Hero.show_player()
Chúng tôi đã tạo một đối tượng được gán cho biến “luke”. Đối tượng này có nguồn gốc từ lớp Anh hùng. Chúng tôi gọi là show_player()
phương pháp hiển thị thông tin về người chơi.
Hãy chạy toàn bộ mã của chúng tôi và xem điều gì sẽ xảy ra:
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ã của chúng tôi không thành công. Điều này là do chúng tôi chưa khởi tạo đối tượng của Anh hùng. Hero.show_player()
không hoạt động vì chúng tôi chưa tạo ra một Anh hùng có thể hiển thị thông tin.
Để giải quyết lỗi này, trước tiên chúng tôi khởi tạo một đối tượng trước khi chúng tôi gọi show_player()
:
luke = Hero("Luke", "Mage") luke.show_player()
Chạy lại mã của chúng tôi:
Player Name: Luke Player Type: Mage
Mã của chúng tôi chạy thành công! Đầu tiên, chúng tôi đã khai báo một biến có tên “luke” lưu trữ thông tin về một người chơi tên là Luke. Loại người chơi của Luke là "Mage". Bây giờ chúng ta đã khởi tạo đối tượng đó, chúng ta có thể gọi show_player()
phương pháp.
Nguyên nhân # 2:Tạo lớp không chính xác
Lỗi "thiếu 1 đối số vị trí bắt buộc:" self "" có thể xảy ra khi bạn khởi tạo sai một lớp. Hãy xem xét đoạn mã sau:
luke = Hero luke.show_player()
Mặc dù mã này tương tự với giải pháp của chúng tôi từ ví dụ cuối cùng, nhưng nó không chính xác. Điều này là do chúng tôi đã không thêm bất kỳ dấu ngoặc đơn nào sau từ Anh hùng. Khi thiếu các dấu ngoặc đơn này, chương trình của chúng ta không biết rằng chúng ta muốn khởi tạo một lớp.
Giải quyết vấn đề này bằng cách thêm dấu ngoặc đơn sau Anh hùng và chỉ định các đối số bắt buộc, “name” và “player_type”:
luke = Hero("Luke", "Mage") luke.show_player()
Mã của chúng tôi hiện đã chạy thành công và trả về thông tin về trình phát của chúng tôi:
Player Name: Luke Player Type: Mage
Kết luận
Lỗi “thiếu 1 đối số vị trí bắt buộc:‘ self ’” được đưa ra khi bạn không khởi tạo một đối tượng của một lớp trước khi gọi một phương thức của lớp. Lỗi này cũng xuất hiện khi bạn khởi tạo sai một lớp.
Để giải quyết lỗi này, hãy đảm bảo rằng trước tiên bạn khởi tạo một đối tượng của một lớp trước khi bạn cố gắng truy cập vào bất kỳ phương thức nào của lớp đó. Sau đó, hãy kiểm tra để đảm bảo bạn sử dụng đúng cú pháp để khởi tạo một đối tượng.
Bây giờ, bạn đã sẵn sàng giải quyết lỗi phổ biến này như một nhà phát triển Python chuyên nghiệp!