Python tạo kiểu lớp
Các ví dụ trên là các lớp và đối tượng ở dạng đơn giản nhất và không thực sự hữu ích trong các ứng dụng thực tế Show
Để hiểu ý nghĩa của các lớp, chúng ta phải hiểu hàm __init__() tích hợp sẵn Tất cả các lớp đều có một hàm gọi là __init__(), hàm này luôn được thực thi khi lớp bắt đầu Sử dụng hàm __init__() để gán giá trị cho thuộc tính đối tượng hoặc các thao tác khác cần thực hiện khi đối tượng được tạo Thí dụTạo một lớp tên là Person, sử dụng hàm __init__() để gán giá trị cho tên và tuổi lớp người p1 = Người("John", 36) in(p1. Tên) Ghi chú. Hàm Hàm __str__()Hàm __str__() kiểm soát những gì sẽ được trả về khi đối tượng lớp được biểu diễn dưới dạng chuỗi Nếu hàm __str__() không được đặt, thì biểu diễn chuỗi của đối tượng được trả về Thí dụBiểu diễn chuỗi của một đối tượng KHÔNG CÓ hàm __str__() lớp người p1 = Người("John", 36) bản in(p1) Tự mình thử »Thí dụBiểu diễn chuỗi của một đối tượng VỚI hàm __str__() lớp người def __str__(bản thân) p1 = Người("John", 36) bản in(p1) Tự mình thử »phương pháp đối tượngCác đối tượng cũng có thể chứa các phương thức. Các phương thức trong các đối tượng là các chức năng thuộc về đối tượng Hãy để chúng tôi tạo một phương thức trong lớp Person Thí dụChèn một hàm in lời chào và thực hiện nó trên đối tượng p1 lớp người def myfunc(bản thân) p1 = Người("John", 36) Ghi chú. Tham số Tham số bản thânTham số Nó không nhất thiết phải được đặt tên là Thí dụSử dụng các từ mysillyobject và abc thay vì self lớp người xác định myfunc (abc) p1 = Người("John", 36) Sửa đổi thuộc tính đối tượngBạn có thể sửa đổi các thuộc tính trên các đối tượng như thế này Xóa thuộc tính đối tượngBạn có thể xóa các thuộc tính trên các đối tượng bằng cách sử dụng từ khóa Xóa đối tượngBạn có thể xóa các đối tượng bằng cách sử dụng từ khóa Tuyên bố vượt quaĐịnh nghĩa Thuật ngữ siêu lập trình đề cập đến khả năng một chương trình có kiến thức hoặc thao tác với chính nó. Python hỗ trợ một dạng lập trình siêu dữ liệu cho các lớp được gọi là siêu dữ liệu Siêu dữ liệu là một khái niệm OOP bí truyền, ẩn đằng sau hầu như tất cả mã Python. Bạn đang sử dụng chúng cho dù bạn có biết hay không. Phần lớn, bạn không cần phải biết về nó. Hầu hết các lập trình viên Python hiếm khi phải suy nghĩ về siêu dữ liệu Tuy nhiên, khi có nhu cầu, Python cung cấp một khả năng mà không phải ngôn ngữ hướng đối tượng nào cũng hỗ trợ. bạn có thể hiểu rõ hơn và xác định siêu dữ liệu tùy chỉnh. Việc sử dụng các siêu dữ liệu tùy chỉnh có phần gây tranh cãi, như được đề xuất bởi trích dẫn sau đây của Tim Peters, bậc thầy về Python, tác giả của Zen of Python
Có những Pythonistas (như những người hâm mộ Python được biết đến) tin rằng bạn không bao giờ nên sử dụng siêu dữ liệu tùy chỉnh. Điều đó có thể hơi xa, nhưng có lẽ đúng là các siêu dữ liệu tùy chỉnh hầu như không cần thiết. Nếu không rõ ràng là một vấn đề cần đến chúng, thì nó có thể sẽ rõ ràng và dễ đọc hơn nếu được giải quyết theo cách đơn giản hơn Tuy nhiên, việc hiểu các siêu dữ liệu Python là đáng giá, bởi vì nó dẫn đến sự hiểu biết tốt hơn về phần bên trong của các lớp Python nói chung. Bạn không bao giờ biết. một ngày nào đó bạn có thể thấy mình ở một trong những tình huống mà bạn chỉ biết rằng một siêu dữ liệu tùy chỉnh là thứ bạn muốn Nhận được thông báo. Đừng bỏ lỡ phần tiếp theo của hướng dẫn này—Nhấp vào đây để tham gia Bản tin Python thực và bạn sẽ biết khi phần tiếp theo ra mắt Kiểu cũ vs. Lớp học kiểu mớiTrong lĩnh vực Python, một lớp có thể là một trong hai loại. Không có thuật ngữ chính thức nào được quyết định, vì vậy chúng được gọi một cách không chính thức là lớp học kiểu cũ và kiểu mới Loại bỏ các quảng cáoLớp học kiểu cũVới các lớp kiểu cũ, lớp và loại không hoàn toàn giống nhau. Một thể hiện của một lớp kiểu cũ luôn được triển khai từ một kiểu dựng sẵn duy nhất có tên là 5. Nếu 6 là một thể hiện của lớp kiểu cũ, thì 7 chỉ định lớp đó, nhưng 8 luôn là 5. Ví dụ sau được lấy từ Python 2. 7>>>
Lớp học kiểu mớiCác lớp kiểu mới thống nhất các khái niệm về lớp và loại. Nếu 6 là một thể hiện của lớp kiểu mới, thì 8 giống như 7>>>
>>>
Loại và LớpTrong Python 3, tất cả các lớp đều là lớp kiểu mới. Do đó, trong Python 3, thật hợp lý khi đề cập đến loại đối tượng và lớp của nó thay thế cho nhau Ghi chú. Trong Python 2, các lớp theo mặc định là kiểu cũ. Trước Python 2. 2, các lớp kiểu mới hoàn toàn không được hỗ trợ. Từ Python 2. 2 trở đi, chúng có thể được tạo nhưng phải được khai báo rõ ràng là kiểu mới Hãy nhớ rằng, trong Python, mọi thứ đều là đối tượng. Lớp cũng là đối tượng. Kết quả là, một lớp phải có một loại. loại của một lớp học là gì? Hãy xem xét những điều sau đây >>>
Loại 3 là lớp 4, như bạn mong đợi. Nhưng loại 4, bản thân lớp, là 6. Nói chung, loại của bất kỳ lớp kiểu mới nào là 6Loại lớp dựng sẵn mà bạn quen thuộc cũng là 6>>>
Đối với vấn đề đó, loại 6 cũng là 6 (vâng, thực sự)>>>
6 là một siêu dữ liệu, trong đó các lớp là các thể hiện. Giống như một đối tượng bình thường là một thể hiện của một lớp, bất kỳ lớp kiểu mới nào trong Python, và do đó, bất kỳ lớp nào trong Python 3, đều là một thể hiện của siêu dữ liệu 6trong trường hợp trên
Xác định một lớp độngHàm 9 tích hợp, khi được truyền một đối số, sẽ trả về loại đối tượng. Đối với các lớp kiểu mới, điều đó thường giống như>>>
Bạn cũng có thể gọi 9 với ba đối số— 2
Gọi 9 theo cách này sẽ tạo ra một phiên bản mới của siêu dữ liệu 6. Nói cách khác, nó tự động tạo ra một lớp mớiTrong mỗi ví dụ sau đây, đoạn mã trên cùng xác định một lớp linh hoạt với 9, trong khi đoạn mã bên dưới xác định lớp theo cách thông thường, với câu lệnh 2. Trong mỗi trường hợp, hai đoạn mã có chức năng tương đương nhauví dụ 1Trong ví dụ đầu tiên này, các đối số 5 và 7 được truyền cho 9 đều trống. Không có kế thừa từ bất kỳ lớp cha nào được chỉ định và ban đầu không có gì được đặt trong từ điển không gian tên. Đây là định nghĩa lớp đơn giản nhất có thể>>>
>>>
ví dụ 2Ở đây, 5 là một bộ có một phần tử duy nhất là 4, chỉ định lớp cha mà 8 kế thừa từ. Một thuộc tính, 9, ban đầu được đặt vào từ điển không gian tên>>>
>>> 0ví dụ 3Lần này, 5 lại trống. Hai đối tượng được đặt vào từ điển không gian tên thông qua đối số 7. Đầu tiên là một thuộc tính có tên là 9 và hàm thứ hai có tên là 3, trở thành một phương thức của lớp đã xác định>>> 1>>> 2Ví dụ 4Chỉ có thể định nghĩa các hàm rất đơn giản bằng 4 trong Python. Trong ví dụ sau, một hàm phức tạp hơn một chút được định nghĩa bên ngoài, sau đó được gán cho 3 trong từ điển không gian tên thông qua tên 6>>> ____9_______3 >>> 4Siêu dữ liệu tùy chỉnhHãy xem xét lại ví dụ quen thuộc này >>> ____9_______5 Biểu thức 7 tạo một thể hiện mới của lớp 4. Khi thông dịch viên gặp 7, điều sau xảy ra
Nếu 4 không xác định 7 và 8, các phương thức mặc định được kế thừa từ tổ tiên của 4. Nhưng nếu 4 xác định các phương thức này, thì chúng sẽ ghi đè lên các phương thức từ tổ tiên, điều này cho phép hành vi tùy chỉnh khi khởi tạo 4Trong phần sau đây, một phương thức tùy chỉnh có tên là 5 được định nghĩa và chỉ định làm phương thức 7 cho 4>>> 6Điều này sửa đổi hành vi khởi tạo của lớp 4. mỗi khi một thể hiện của 4 được tạo, theo mặc định, nó được khởi tạo với một thuộc tính có tên là 9, có giá trị là 01. (Mã như thế này thường xuất hiện trong phương thức 8 và không thường xuất hiện trong phương thức 7. Ví dụ này được tạo ra cho mục đích trình diễn. )Bây giờ, như đã được nhắc lại, lớp cũng là đối tượng. Giả sử bạn muốn tùy chỉnh tương tự hành vi khởi tạo khi tạo một lớp như 4. Nếu bạn làm theo mẫu ở trên, bạn sẽ xác định lại một phương thức tùy chỉnh và gán nó làm phương thức 7 cho lớp mà 4 là một thể hiện. 4 là một thể hiện của siêu dữ liệu 6, vì vậy mã trông giống như thế này>>> 7Ngoại trừ, như bạn có thể thấy, bạn không thể chỉ định lại phương thức 7 của siêu dữ liệu 6. Python không cho phép nóĐiều này có lẽ cũng tốt. 6 là siêu dữ liệu mà từ đó tất cả các lớp kiểu mới được bắt nguồn. Dù sao thì bạn thực sự không nên loay hoay với nó. Nhưng sau đó, có cách nào để truy vấn, nếu bạn muốn tùy chỉnh việc khởi tạo một lớp?Một giải pháp khả thi là siêu dữ liệu tùy chỉnh. Về cơ bản, thay vì loay hoay với siêu dữ liệu 6, bạn có thể xác định siêu dữ liệu của riêng mình, bắt nguồn từ 6, và sau đó bạn có thể sử dụng siêu dữ liệu đó để thay thếBước đầu tiên là xác định siêu dữ liệu bắt nguồn từ 6, như sau>>> 8Tiêu đề định nghĩa 15 xác định rằng 16 bắt nguồn từ 6. Vì 6 là một siêu dữ liệu, điều đó làm cho 16 cũng là một siêu dữ liệuLưu ý rằng một phương pháp 7 tùy chỉnh đã được xác định cho 16. Không thể làm điều đó trực tiếp với siêu dữ liệu 6. Phương pháp 7 thực hiện như sau
Bây giờ nửa còn lại của voodoo. Xác định một lớp mới 4 và chỉ định rằng siêu dữ liệu của nó là siêu dữ liệu tùy chỉnh 16, chứ không phải là siêu dữ liệu tiêu chuẩn 6. Điều này được thực hiện bằng cách sử dụng từ khóa 32 trong định nghĩa lớp như sau>>> 9thì đấy. 4 đã tự động chọn thuộc tính 9 từ siêu dữ liệu 16. Tất nhiên, bất kỳ lớp nào khác mà bạn định nghĩa tương tự cũng sẽ làm như vậy>>> 0Cũng giống như cách mà một lớp có chức năng như một khuôn mẫu để tạo ra các đối tượng, một siêu lớp có chức năng như một khuôn mẫu để tạo ra các lớp. Siêu lớp đôi khi được gọi là nhà máy lớp So sánh hai ví dụ sau nhà máy đối tượng >>> 1lớp nhà máy >>> 2Loại bỏ các quảng cáoĐiều này có thực sự cần thiết?Đơn giản như ví dụ về nhà máy lớp ở trên, đó là bản chất của cách hoạt động của siêu dữ liệu. Chúng cho phép tùy chỉnh khởi tạo lớp Tuy nhiên, việc cấp thuộc tính tùy chỉnh 9 cho mỗi lớp mới tạo đã gây ra rất nhiều phiền phức. Bạn có thực sự cần một siêu dữ liệu chỉ cho điều đó?Trong Python, có ít nhất một số cách khác để thực hiện điều tương tự một cách hiệu quả Kế thừa đơn giản >>> 3trang trí lớp học >>> 4Phần kết luậnNhư Tim Peters gợi ý, siêu dữ liệu có thể dễ dàng biến thành một “giải pháp để tìm kiếm một vấn đề. ” Thường không cần thiết phải tạo các siêu dữ liệu tùy chỉnh. Nếu vấn đề hiện tại có thể được giải quyết theo cách đơn giản hơn, thì có lẽ nên. Tuy nhiên, sẽ rất hữu ích khi hiểu siêu dữ liệu để bạn hiểu các lớp Python nói chung và có thể nhận ra khi nào siêu dữ liệu thực sự là công cụ thích hợp để sử dụng Đánh dấu là đã hoàn thành 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về John Sturtz John là một Pythonista cuồng nhiệt và là thành viên của nhóm hướng dẫn Real Python » Thông tin thêm về JohnMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Đan Joanna Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Chuyên gia Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi Bạn có thể tạo một kiểu trong Python không?Câu trả lời ngắn gọn là bạn không thể tạo một loại mới trong python mà không chỉnh sửa mã nguồn (được viết bằng C). Tuy nhiên, câu trả lời về việc tạo một lớp trong python có lẽ là cách dễ dàng hơn vì việc chỉnh sửa nguồn có thể tạo ra các vấn đề tương thích với các gói (có thể nói).
Loại lớp trong Python là gì?loại là siêu dữ liệu, trong đó các lớp là các thể hiện . Giống như một đối tượng thông thường là một thể hiện của một lớp, bất kỳ lớp kiểu mới nào trong Python và do đó, bất kỳ lớp nào trong Python 3, đều là một thể hiện của siêu dữ liệu kiểu. trong trường hợp trên. x là một thể hiện của lớp Foo. Foo là một thể hiện của loại siêu dữ liệu.
Kiểu () trong Python là gì?Cú pháp hàm type() trong Python
. Cú pháp hàm kiểu Python () là. type(object) type(name, base, dict) Khi một đối số duy nhất được truyền cho hàm type(), nó sẽ trả về kiểu của đối tượng. Giá trị của nó giống như đối tượng. used to get the type of an object. Python type() function syntax is: type(object) type(name, bases, dict) When a single argument is passed to the type() function, it returns the type of the object. Its value is the same as the object.
Việc tạo một lớp mới có tạo ra một loại mới không?Tạo một lớp mới sẽ tạo ra một loại đối tượng mới , cho phép tạo các phiên bản mới của loại đó. Mỗi thể hiện của lớp có thể có các thuộc tính gắn liền với nó để duy trì trạng thái của nó. Các thể hiện của lớp cũng có thể có các phương thức (được định nghĩa bởi lớp của nó) để sửa đổi trạng thái của nó. |