Chẳng hạn, lớp Trái cây này tự gán tên và màu tùy chỉnh khi tạo. Những thứ này sau đó có thể được truy cập bằng phương thức info[]
class Fruit: def __init__[self, name, color]: self.name = name self.color = color def info[self]: print[self.color, self.name] banana = Fruit["Banana", "Yellow"] banana.info[]
đầu ra
Yellow Banana
Để hiểu cách thức hoạt động của tính năng này, hãy đi sâu hơn vào chi tiết về self trong Python
Hướng dẫn này dành cho những người đã biết về các lớp học nhưng khái niệm về bản thân còn hơi mơ hồ. Nếu bạn không quen với các lớp Python, vui lòng xem hướng dẫn này
Từ khóa 'bản thân' trong Python
Trong Python, một lớp là một kế hoạch chi tiết để tạo các đối tượng
Mỗi đối tượng Python là đại diện của một số lớp. Trong Python, một đối tượng còn được gọi là một thể hiện của một lớp. Nếu bạn muốn tạo một đối tượng trong Python, bạn cần phải có một lớp để từ đó bạn có thể tạo một đối tượng
Một lớp Python điển hình bao gồm các phương thức thực hiện các hành động dựa trên các thuộc tính được gán cho đối tượng
Chẳng hạn, hạng Trọng lượng có thể lưu trữ kilôgam và có khả năng chuyển đổi chúng thành pound
Trong một lớp Python, tham số self đề cập đến chính thể hiện của lớp. Điều này rất hữu ích vì nếu không sẽ không có cách nào để truy cập các thuộc tính và phương thức của lớp
Ví dụ. Lớp trái cây
Để hiểu rõ hơn về bản thân, chúng ta hãy xem một lớp Fruit đơn giản. Lớp Fruit này cho phép bạn tạo các đối tượng Fruit với tên và màu tùy chỉnh
class Fruit: def __init__[self, name, color]: self.name = name self.color = color def info[self]: print[self.color, self.name]
Bây giờ bạn có thể tạo các đối tượng Fruit theo cách này
banana = Fruit["Banana", "Yellow"] apple = Fruit["Apple", "Red"]
Và bạn có thể hiển thị thông tin liên quan đến họ
banana.info[] apple.info[]
đầu ra
Yellow Banana Red Apple
Làm thế nào để 'bản thân' hoạt động trong ví dụ?
Hãy kiểm tra xem lớp Fruit này hoạt động như thế nào
Khi bạn tạo một đối tượng Fruit mới, phương thức __init__ được gọi dưới mui xe. Nó chịu trách nhiệm tạo ra các đối tượng. Hãy kiểm tra phương thức __init__ của lớp Fruit để xem chuyện gì đang xảy ra. Phải mất ba đối số
- bản thân
- Tên
- màu
Khi bạn tạo một đối tượng Fruit, phương thức __init__ được gọi với tên và màu tùy chỉnh. Lưu ý cách bạn không cần chuyển self làm đối số. Python tự động làm điều đó cho bạn
Vì vậy, khi bạn gọi chuối = Trái cây[“Chuối”, “Đỏ”]
- Phương thức __init__ bắt đầu khởi tạo đối tượng banana với các đối số tên và màu đã cho
- Nó tự tạo ra các thuộc tính mới. tên và bản thân. color và lưu trữ tên đầu vào và màu sắc cho chúng
- Sau này, có thể truy cập tên và các thuộc tính màu của chuối ở bất kỳ đâu trong đối tượng thông qua self. tên hoặc tự. màu
Hãy cũng xem điều gì sẽ xảy ra khi bạn gọi chuối. thông tin[]
Khi bạn gọi chuối. info[], Python sẽ tự động chuyển self vào lệnh gọi phương thức dưới dạng đối số bên trong. Phương thức info[] sau đó có thể sử dụng self để truy cập các thuộc tính tên và màu của đối tượng. Không có bản thân, nó sẽ không thể làm điều đó
Lưu trữ mọi thứ cho chính mình trong Python
Trước đây, bạn đã thấy cách tham số self có thể được sử dụng để lưu trữ các thuộc tính cho các đối tượng
Cụ thể hơn, bạn đã thấy cách tiếp cận điển hình khi bạn chuyển các đối số của phương thức __init__ và gán chúng cho self bằng cách sử dụng cùng một tên
def __init__[self, name, color]: self.name = name self.color = color
Điều này có thể đặt ra câu hỏi "Các tên đối số có phải bằng với tên được gán cho bản thân không?"
Tương tự như cách bạn có thể tạo bất kỳ biến nào ở bất kỳ đâu trong Python, bạn có thể gán bất kỳ thuộc tính nào cho một đối tượng thông qua self
Điều này có nghĩa là bạn có thể lưu trữ bất kỳ giá trị nào với bất kỳ tên nào để tự. Chúng thậm chí không cần phải được đưa ra làm đối số trong hàm __init__
Ví dụ
Ví dụ: hãy tạo một lớp Điểm đại diện cho một điểm trong không gian 3D. Hãy khởi tạo các đối tượng Point ở gốc mà không yêu cầu các điểm làm đối số khi khởi tạo
Để thực hiện việc này, hãy gán các giá trị x, y và z bằng 0 cho self trong phương thức __init__
class Point: def __init__[self]: self.x = 0 self.y = 0 self.z = 0
Bây giờ bạn có thể tạo các đối tượng Point tới gốc tọa độ
________số 8đầu ra
0 0 0
Vấn đề ở đây là minh họa cách bạn có thể tự do thêm bất kỳ thuộc tính nào vào thuộc tính tự của đối tượng
Một phương thức không có đối số 'tự' trong lớp Python
Trong Python, một phương thức cần có đối số self. Mặt khác, nó không biết nó thuộc về lớp nào và không thể thực hiện các hành động trên nó
Để xem điều gì sẽ xảy ra nếu một phương thức không chấp nhận đối số self, hãy loại bỏ self khỏi phương thức info[]
Yellow Banana0
đầu ra
Yellow Banana1
Dòng cuối cùng gợi ý rằng phương thức info[] không có đối số, nhưng chúng tôi đã cung cấp cho nó một đối số. Nhưng dựa trên đoạn mã trên, có vẻ như bạn đã không đưa ra bất kỳ đối số nào. Vậy tại sao phiên dịch viên vẫn nghĩ rằng bạn đã cho nó một số?
Mặc dù bạn không cung cấp bất kỳ đối số nào cho phương thức info[], nhưng Python vẫn tự động cố gắng đưa self vào lệnh gọi. Điều này là do Python biết tất cả các phương thức trong một lớp cần phải có một tham chiếu đến chính lớp đó để hoạt động bình thường. Nhưng trong quá trình triển khai info[] của chúng tôi, không có đối số self. Do đó, việc chuyển self đối số vào nó đằng sau hậu trường sẽ thất bại
Điều này cho bạn thấy rằng bạn cần sử dụng đối số self trong các phương thức
Bằng chứng rằng bản thân đề cập đến chính đối tượng
Để rõ ràng, hãy để tôi chứng minh rằng bản thân thực sự đề cập đến chính đối tượng
Để làm điều này, hãy kiểm tra vị trí bộ nhớ của self và một đối tượng Fruit
Trong Python, bạn có thể kiểm tra địa chỉ bộ nhớ của đối tượng bằng hàm. [Ở đây mình đã đơn giản hóa class Fruit để dễ hiểu hơn]
Yellow Banana2
đầu ra
Yellow Banana3
Như bạn có thể thấy, các địa chỉ bộ nhớ bằng nhau. Điều này cho bạn thấy rằng self bên trong lớp Fruit trỏ đến cùng một địa chỉ với đối tượng trái cây mà bạn vừa tạo. Nói cách khác, tham số self thực sự đề cập đến chính đối tượng
Bản thân không phải là từ khóa dành riêng trong Python
Lưu ý rằng self không phải là từ khóa dành riêng trong Python. Bạn có thể sử dụng bất kỳ tên nào bạn thích miễn là có một
Chẳng hạn, hãy thay đổi cách triển khai lớp Fruit từ các phần trước. Lần này, hãy sử dụng tên this thay vì self
Yellow Banana4
Mã này hoạt động giống hệt như mã đã sử dụng self
Nhưng vì self được sử dụng phổ biến trong số các nhà phát triển Python, nên không nên sử dụng bất kỳ thứ gì khác. Bạn khó có thể gặp bất cứ thứ gì khác ngoài self khi làm việc với các lớp trong Python
Phần kết luận
Hôm nay bạn đã học self làm gì trong một lớp học Python
Tóm lại, self trong Python đề cập đến chính đối tượng đó. Nó rất hữu ích vì theo cách này, lớp biết cách truy cập các thuộc tính và phương thức của chính nó
Khi bạn tạo một đối tượng, phương thức __init__ được gọi. Trong phương thức này, bạn thường gán các thuộc tính cho thể hiện của lớp thông qua tự
Lưu ý cách self không phải là từ khóa dành riêng. Bạn có thể sử dụng bất cứ thứ gì thay vì self, miễn là bạn chuyển nó làm đối số đầu tiên cho mỗi phương thức của lớp. Tuy nhiên, self được sử dụng phổ biến đến mức bạn không nên sử dụng bất cứ thứ gì khác, mặc dù có thể