Ghi đè __dict__ python
Tạo các lớp giống như từ điển có thể là một yêu cầu trong sự nghiệp Python của bạn. Cụ thể, bạn có thể quan tâm đến việc tạo từ điển tùy chỉnh với hành vi được sửa đổi, chức năng mới hoặc cả hai. Trong Python, bạn có thể làm điều này bằng cách kế thừa từ một lớp , bằng cách phân lớp trực tiếp lớp 7 tích hợp sẵn hoặc bằng cách kế thừa từ Show
Trong hướng dẫn này, bạn sẽ học cách
Ngoài ra, bạn sẽ viết mã một vài ví dụ giúp bạn hiểu những ưu và nhược điểm của việc sử dụng 7 so với 8 để tạo các lớp từ điển tùy chỉnh của bạnĐể tận dụng tối đa hướng dẫn này, bạn nên làm quen với lớp 7 tích hợp sẵn của Python cũng như các tính năng và chức năng tiêu chuẩn của nó. Bạn cũng sẽ cần biết kiến thức cơ bản về lập trình hướng đối tượng và hiểu cách hoạt động của tính kế thừa trong PythonTham gia ngay. Nhấp vào đây để tham gia Bản tin Python thực sự và bạn sẽ không bao giờ bỏ lỡ một bài hướng dẫn, cập nhật khóa học hoặc bài đăng nào khác về Python Tạo các lớp giống như từ điển trong PythonLớp 7 tích hợp cung cấp kiểu dữ liệu sưu tập có giá trị và linh hoạt, từ điển Python. Từ điển ở khắp mọi nơi, kể cả trong mã của bạn và mã của chính PythonĐôi khi, chức năng tiêu chuẩn của từ điển Python không đủ cho một số trường hợp sử dụng nhất định. Trong những tình huống này, có lẽ bạn sẽ phải tạo một lớp giống như từ điển tùy chỉnh. Nói cách khác, bạn cần một lớp hoạt động giống như một từ điển thông thường nhưng có chức năng mới hoặc được sửa đổi Thông thường, bạn sẽ tìm thấy ít nhất hai lý do để tạo các lớp giống như từ điển tùy chỉnh
Lưu ý rằng bạn cũng có thể đối mặt với các tình huống trong đó bạn cần mở rộng và sửa đổi chức năng tiêu chuẩn của từ điển Tùy thuộc vào nhu cầu cụ thể và trình độ kỹ năng của bạn, bạn có thể chọn từ một số chiến lược để tạo từ điển tùy chỉnh. Bạn có thể
Có một số cân nhắc chính khi bạn chọn chiến lược phù hợp để triển khai. Tiếp tục đọc để biết thêm chi tiết Loại bỏ các quảng cáoXây dựng một lớp giống như từ điển từ một lớp cơ sở trừu tượngChiến lược tạo các lớp giống như từ điển này yêu cầu bạn kế thừa từ một lớp cơ sở trừu tượng (ABC), như. Lớp này cung cấp các triển khai chung cụ thể của tất cả các phương thức từ điển ngoại trừ , , , và , mà bạn sẽ phải tự triển khai Ngoài ra, giả sử bạn cần tùy chỉnh chức năng của bất kỳ phương thức từ điển tiêu chuẩn nào khác. Trong trường hợp đó, bạn sẽ phải ghi đè phương thức hiện có và cung cấp cách triển khai phù hợp đáp ứng nhu cầu của bạn Quá trình này ngụ ý một lượng công việc hợp lý. Nó cũng dễ bị lỗi và yêu cầu kiến thức nâng cao về Python và mô hình dữ liệu của nó. Nó cũng có thể ngụ ý các vấn đề về hiệu suất vì bạn sẽ viết lớp bằng Python thuần túy Ưu điểm chính của chiến lược này là ABC gốc sẽ cảnh báo bạn nếu bạn bỏ lỡ bất kỳ phương pháp nào trong quá trình triển khai tùy chỉnh của mình Vì những lý do này, bạn chỉ nên áp dụng chiến lược này nếu bạn cần một lớp giống như từ điển về cơ bản khác với từ điển tích hợp Trong hướng dẫn này, bạn sẽ tập trung vào việc tạo các lớp giống như từ điển bằng cách kế thừa từ lớp 7 và lớp 8 có sẵn, đây dường như là những chiến lược nhanh nhất và thiết thực nhấtKế thừa từ lớp >>> numbers = UpperCaseDict({"one": 1, "two": 2, "three": 3}) >>> numbers {'one': 1, 'two': 2, 'three': 3} 7 tích hợp sẵn của PythonTrong một thời gian dài, không thể phân lớp Python được triển khai trong C. Trăn 2. 2 đã khắc phục sự cố này. Bây giờ bạn có thể , bao gồm cả 7. Sự thay đổi này mang lại một số lợi thế kỹ thuật cho các lớp con bởi vì bây giờ chúng
Mục đầu tiên trong danh sách này có thể là một yêu cầu đối với mã C mong đợi một lớp tích hợp Python. Mục thứ hai cho phép bạn thêm chức năng mới vào đầu hành vi từ điển tiêu chuẩn. Cuối cùng, mục thứ ba sẽ cho phép bạn hạn chế các thuộc tính của một lớp con chỉ với những thuộc tính được xác định trước trong 41Mặc dù việc phân lớp các loại tích hợp sẵn có một số ưu điểm, nhưng nó cũng có một số nhược điểm. Trong trường hợp cụ thể của từ điển, bạn sẽ tìm thấy một vài cạm bẫy khó chịu. Ví dụ: giả sử bạn muốn tạo một lớp giống như từ điển tự động lưu trữ tất cả các khóa của nó dưới dạng chuỗi trong đó tất cả các chữ cái, nếu có, là chữ hoa Để làm điều này, bạn có thể tạo một lớp con của 7 ghi đè phương thức 63>>> 7Mát mẻ. Từ điển tùy chỉnh của bạn dường như hoạt động tốt. Tuy nhiên, có một số vấn đề tiềm ẩn trong lớp này. Nếu bạn cố gắng tạo một phiên bản của 46 bằng cách sử dụng một số dữ liệu khởi tạo, thì bạn sẽ nhận được một hành vi đáng ngạc nhiên và có lỗi>>>
Điều gì vừa xảy ra? . Vì vậy, chuyển đổi chữ hoa không bao giờ chạy Thật không may, sự cố này ảnh hưởng đến các phương pháp từ điển khác, chẳng hạn như và , >>>
Một lần nữa, chức năng viết hoa của bạn không hoạt động tốt trong các ví dụ này. Để giải quyết vấn đề này, bạn phải cung cấp triển khai tùy chỉnh của tất cả các phương pháp bị ảnh hưởng. Ví dụ: để khắc phục sự cố khởi tạo, bạn có thể viết một phương thức 47 giống như thế này 6Ở đây, 47 chuyển đổi các phím thành chữ hoa và sau đó khởi tạo phiên bản hiện tại với dữ liệu kết quảVới bản cập nhật này, quá trình khởi tạo từ điển tùy chỉnh của bạn sẽ hoạt động bình thường. Hãy tiếp tục và thử bằng cách chạy đoạn mã sau >>> 4Cung cấp phương thức 47 của riêng bạn đã khắc phục sự cố khởi tạo. Tuy nhiên, các phương pháp khác như 49 tiếp tục hoạt động không chính xác, vì bạn có thể kết luận từ khóa 95 không phải là chữ hoaTại sao các lớp con 7 hành xử theo cách này? . Do đó, chúng có thể mở rộng nhưng không thể sửa đổi. Việc cho phép sửa đổi các tính năng cốt lõi của các lớp này có thể phá vỡ khả năng của chúng. Vì vậy, các nhà phát triển lõi Python đã quyết định bảo vệ chúng khỏi các sửa đổiĐó là lý do tại sao việc phân lớp lớp 7 tích hợp có thể hơi phức tạp, tốn nhiều công sức và dễ bị lỗi. May mắn thay, bạn vẫn có lựa chọn thay thế. Lớp 8 từ mô-đun 2 là một trong số đóLoại bỏ các quảng cáoPhân lớp >>> numbers = UpperCaseDict({"one": 1, "two": 2, "three": 3}) >>> numbers {'one': 1, 'two': 2, 'three': 3} 8 Từ >>> numbers = UpperCaseDict() >>> numbers["one"] = 1 >>> numbers["two"] = 2 >>> numbers["three"] = 3 >>> numbers {'ONE': 1, 'TWO': 2, 'THREE': 3} >>> numbers.update({"four": 4}) >>> numbers {'ONE': 1, 'TWO': 2, 'THREE': 3, 'four': 4} >>> numbers.setdefault("five", 5) 5 >>> numbers {'ONE': 1, 'TWO': 2, 'THREE': 3, 'four': 4, 'five': 5} 2Bắt đầu với Python 1. 6, ngôn ngữ đã cung cấp 8 như một phần của thư viện tiêu chuẩn. Lớp này ban đầu nằm trong một mô-đun được đặt tên theo chính lớp đó. Trong Python 3, 8 đã được chuyển sang mô-đun 2, đây là một nơi trực quan hơn cho nó, dựa trên mục đích chính của lớp 8 được tạo lại khi không thể kế thừa trực tiếp từ 7 của Python. Mặc dù nhu cầu về lớp này đã được thay thế một phần bằng khả năng phân lớp trực tiếp lớp 7 được tích hợp sẵn, nhưng 8 vẫn có sẵn trong thư viện chuẩn, cả về sự thuận tiện và khả năng tương thích ngược 8 là một trình bao bọc thuận tiện xung quanh một đối tượng 7 thông thường. Lớp này cung cấp hành vi tương tự như kiểu dữ liệu 7 tích hợp với tính năng bổ sung cho phép bạn truy cập vào từ điển cơ bản thông qua thuộc tính thể hiện. Tính năng này có thể tạo thuận lợi cho việc tạo các lớp giống như từ điển tùy chỉnh, như bạn sẽ tìm hiểu sau trong hướng dẫn này 8 được thiết kế đặc biệt cho mục đích phân lớp hơn là để khởi tạo trực tiếp, điều đó có nghĩa là mục đích chính của lớp là cho phép bạn tạo các lớp giống như từ điển thông qua kế thừaNgoài ra còn có sự khác biệt tiềm ẩn khác. Để khám phá chúng, hãy quay lại triển khai ban đầu của bạn về 46 và cập nhật nó như trong mã bên dưới>>> 9Lần này, thay vì kế thừa từ 7, bạn đang kế thừa từ 8 mà bạn đã nhập từ mô-đun 2. Thay đổi này sẽ ảnh hưởng đến hành vi của lớp 46 của bạn như thế nào? >>> 3Bây giờ 46 hoạt động chính xác mọi lúc. Bạn không cần cung cấp triển khai tùy chỉnh của ________ 147, ________ 149 hoặc ________ 290. Lớp học chỉ hoạt động. Điều này là do trong 8, tất cả các phương pháp cập nhật khóa hiện có hoặc thêm khóa mới đều dựa vào phiên bản 63 của bạnNhư bạn đã biết trước đây, sự khác biệt đáng chú ý nhất giữa 8 và 7 là thuộc tính 22, chứa từ điển được bao bọc. Sử dụng trực tiếp 22 có thể làm cho mã của bạn đơn giản hơn vì bạn không cần phải gọi 49 mọi lúc để cung cấp chức năng mong muốn. Bạn chỉ cần truy cập vào 22 và làm việc với nó như với bất kỳ từ điển thông thường nàoCác lớp giống như từ điển mã hóa. Ví dụ thực tếBạn đã biết rằng các lớp con của 7 không gọi 63 từ các phương thức như 49 và 47. Thực tế này làm cho các lớp con của 7 hoạt động khác với một lớp Python điển hình với phương thức 63Để khắc phục sự cố này, bạn có thể kế thừa từ 8, vốn gọi 63 từ tất cả các thao tác đặt hoặc cập nhật giá trị trong từ điển cơ bản. Nhờ tính năng này, 8 có thể làm cho mã của bạn an toàn hơn và nhỏ gọn hơnPhải thừa nhận rằng, khi bạn nghĩ đến việc tạo một lớp giống như từ điển, việc kế thừa từ 7 sẽ tự nhiên hơn là kế thừa từ 8. Điều này là do tất cả các nhà phát triển Python đều biết về 7, nhưng không phải tất cả các nhà phát triển Python đều biết về sự tồn tại của 8Kế thừa từ 7 thường ngụ ý một số vấn đề mà bạn có thể khắc phục bằng cách sử dụng 8 thay thế. Tuy nhiên, những vấn đề này không phải lúc nào cũng liên quan. Mức độ liên quan của chúng phụ thuộc rất nhiều vào cách bạn muốn tùy chỉnh chức năng của từ điểnĐiểm mấu chốt là 8 không phải lúc nào cũng là giải pháp phù hợp. Nói chung, nếu bạn muốn mở rộng từ điển tiêu chuẩn mà không ảnh hưởng đến cấu trúc cốt lõi của nó, thì hoàn toàn có thể kế thừa từ 7. Mặt khác, nếu bạn muốn thay đổi hành vi từ điển cốt lõi bằng cách ghi đè các phương thức đặc biệt của nó, thì 8 là lựa chọn thay thế tốt nhất của bạnTrong mọi trường hợp, hãy nhớ rằng 7 được viết bằng C và được tối ưu hóa cao cho hiệu suất. Trong khi đó, 8 được viết bằng Python thuần túy, điều này có thể gây ra một hạn chế đáng kể về mặt hiệu suấtBạn nên xem xét một số yếu tố khi quyết định nên thừa kế từ 7 hay 8. Những yếu tố này bao gồm, nhưng không giới hạn, những điều sau đây
Trong phần sau, bạn sẽ trải nghiệm ba yếu tố đầu tiên trong danh sách này bằng cách mã hóa một số ví dụ thực tế. Bạn sẽ tìm hiểu về ý nghĩa hiệu suất sau này, trong phần về Loại bỏ các quảng cáoTừ điển chấp nhận cách đánh vần các phím của Anh và MỹNhư ví dụ đầu tiên, giả sử bạn cần một từ điển lưu trữ các khóa bằng tiếng Anh Mỹ và cho phép tra cứu khóa bằng tiếng Anh Mỹ hoặc Anh. Để viết mã từ điển này, bạn cần sửa đổi ít nhất hai , 63 và 62Phương pháp 63 sẽ cho phép bạn luôn lưu trữ chìa khóa bằng tiếng Anh Mỹ. Phương thức 62 sẽ cho phép truy xuất giá trị được liên kết với một khóa nhất định, cho dù nó được đánh vần bằng tiếng Anh Mỹ hay AnhBởi vì bạn cần sửa đổi hành vi cốt lõi của lớp 7, sử dụng 8 sẽ là lựa chọn tốt hơn để viết mã lớp này. Với 8, bạn sẽ không phải cung cấp các triển khai tùy chỉnh của 47, 49, v.v.Khi bạn phân lớp 8, bạn có hai cách chính để mã hóa lớp của mình. Bạn có thể dựa vào thuộc tính 22, thuộc tính này có thể tạo điều kiện thuận lợi cho việc viết mã hoặc bạn có thể dựa vào 49 và các phương thức đặc biệtĐây là mã dựa trên 22 2Trong ví dụ này, trước tiên bạn xác định một hằng số, 26, chứa các từ tiếng Anh làm khóa và các từ tiếng Mỹ phù hợp làm giá trịSau đó, bạn xác định 27, kế thừa từ 8. Phương thức 62 tìm khóa hiện tại. Nếu khóa tồn tại, thì phương thức sẽ trả về nó. Nếu khóa không tồn tại, thì phương thức này sẽ kiểm tra xem khóa đó có được đánh vần bằng tiếng Anh Anh không. Nếu đúng như vậy, thì khóa được dịch sang tiếng Anh Mỹ và được truy xuất từ từ điển cơ bảnPhương thức 63 cố gắng tìm khóa đầu vào trong từ điển 26. Nếu khóa đầu vào tồn tại trong 26, thì nó sẽ được dịch sang tiếng Anh Mỹ. Cuối cùng, phương thức gán đầu vào 33 cho mục tiêu 34Đây là cách lớp 27 của bạn hoạt động trong thực tế>>> 4Bằng cách phân lớp 8, bạn đang tiết kiệm cho mình khỏi việc viết nhiều mã. Ví dụ: bạn không phải cung cấp các phương thức như 37, 49 hoặc 90, vì việc triển khai mặc định của chúng sẽ tự động dựa vào các phương thức 62 và 63 của bạnNếu bạn có ít mã hơn để viết, thì bạn sẽ có ít việc phải làm hơn. Quan trọng hơn, bạn sẽ an toàn hơn vì ít mã hơn thường đồng nghĩa với nguy cơ lỗi và sai sót thấp hơn Hạn chế chính của việc triển khai này là nếu một ngày nào đó bạn quyết định cập nhật 27 và làm cho nó kế thừa từ 7, thì bạn sẽ phải viết lại hầu hết mã để ngăn chặn việc sử dụng 22Ví dụ dưới đây cho thấy cách cung cấp chức năng giống như trước khi sử dụng 49 và một số phương thức đặc biệt. Lần này, từ điển tùy chỉnh của bạn hoàn toàn tương thích với 7, vì vậy bạn có thể thay đổi lớp cha bất cứ lúc nào bạn muốn 24Cách triển khai này trông hơi khác so với cách triển khai ban đầu nhưng hoạt động giống nhau. Nó cũng có thể khó viết mã hơn vì bạn không sử dụng 22 nữa. Thay vào đó, bạn đang sử dụng 49, 62 và 63. Mã này yêu cầu kiến thức nhất định về mô hình dữ liệu của Python, đây là một chủ đề phức tạp và nâng caoƯu điểm chính của cách triển khai mới này là lớp của bạn hiện tương thích với 7, vì vậy bạn có thể thay đổi lớp cấp trên bất kỳ lúc nào nếu cầnGhi chú. Hãy nhớ rằng nếu bạn kế thừa trực tiếp từ 7, thì bạn cần triển khai lại 47 và các phương pháp khác để chúng cũng dịch các phím sang chính tả của người Mỹ khi các phím được thêm vào từ điểnViệc mở rộng chức năng từ điển chuẩn bằng cách phân lớp 8 thường thuận tiện hơn bằng cách phân lớp 7. Lý do chính là do 7 tích hợp sẵn có một số lối tắt triển khai và tối ưu hóa buộc bạn phải ghi đè các phương thức mà bạn chỉ có thể kế thừa nếu bạn sử dụng 8 làm lớp chaLoại bỏ các quảng cáoMột từ điển truy cập các khóa thông qua các giá trịMột yêu cầu phổ biến khác đối với từ điển tùy chỉnh là cung cấp chức năng bổ sung ngoài hành vi tiêu chuẩn. Ví dụ: giả sử bạn muốn tạo một lớp giống như từ điển cung cấp các phương thức để truy xuất khóa ánh xạ tới một giá trị đích nhất định Bạn cần một phương thức truy xuất khóa đầu tiên ánh xạ tới giá trị đích. Bạn cũng muốn một phương thức trả về một trình vòng lặp trên các khóa ánh xạ tới các giá trị bằng nhau Đây là một triển khai có thể có của từ điển tùy chỉnh này 0Lần này, thay vì thừa kế từ 8, bạn đang thừa kế từ 7. Tại sao? . Do đó, kế thừa từ 7 là phù hợp hơn. Nó cũng hiệu quả hơn về mặt hiệu suất, như bạn sẽ thấy sau trong hướng dẫn nàyPhương thức 61 lặp lại các cặp khóa-giá trị trong từ điển cơ bản. Câu lệnh điều kiện kiểm tra các giá trị khớp với giá trị đích. Khối mã 62 trả về khóa của giá trị khớp đầu tiên. Nếu khóa mục tiêu bị thiếu, thì phương thức này sẽ tăng 63Là một phương thức tạo tạo ra các khóa theo yêu cầu, 64 sẽ chỉ tạo ra những khóa có giá trị khớp với 33 được cung cấp dưới dạng đối số trong lệnh gọi phương thứcĐây là cách từ điển này hoạt động trong thực tế >>> 1Mát mẻ. Từ điển 66 của bạn hoạt động như mong đợi. Nó kế thừa các tính năng của từ điển cốt lõi từ 7 của Python và triển khai chức năng mới trên đóNói chung, bạn nên sử dụng 8 để tạo một lớp giống như từ điển hoạt động giống như lớp 7 tích hợp nhưng tùy chỉnh một số chức năng cốt lõi của nó, chủ yếu là các phương thức đặc biệt như 63 và 62Mặt khác, nếu bạn chỉ cần một lớp giống như từ điển với chức năng mở rộng không ảnh hưởng hoặc sửa đổi hành vi cốt lõi của 7, thì tốt hơn hết là bạn nên kế thừa trực tiếp từ 7 trong Python. Thực hành này sẽ nhanh hơn, tự nhiên hơn và hiệu quả hơnTừ điển với các chức năng bổ sungVí dụ cuối cùng về cách triển khai từ điển tùy chỉnh với các tính năng bổ sung, giả sử bạn muốn tạo một từ điển cung cấp các phương thức sau Phương thức Mô tả 74Lấy một đối số có thể gọi là 75 làm đối số và áp dụng nó cho tất cả các giá trị trong từ điển cơ bản 76Xóa một 34 đã cho khỏi từ điển cơ sở 78Trả về 79 hoặc 80 tùy thuộc vào việc từ điển có trống hay khôngĐể triển khai ba phương thức này, bạn không cần sửa đổi hành vi cốt lõi của lớp 7 tích hợp. Vì vậy, phân lớp 7 thay vì 8 dường như là cách tốt nhấtĐây là mã triển khai các phương thức cần thiết trên đầu trang của 7 2Trong ví dụ này, 85 lấy một đối số có thể gọi được và áp dụng nó cho mọi giá trị trong từ điển cơ bản. Giá trị được chuyển đổi sau đó được gán lại cho khóa ban đầu. Phương thức 86 sử dụng câu lệnh để xóa khóa mục tiêu khỏi từ điển. Cuối cùng, 78 sử dụng hàm 89 tích hợp để tìm hiểu xem từ điển có trống hay khôngĐây là cách hoạt động của 90>>> 3Trong các ví dụ này, trước tiên bạn tạo một phiên bản của 90 bằng cách sử dụng từ điển thông thường làm đối số. Sau đó, bạn gọi 85 trên từ điển mở rộng. Phương pháp này lấy một hàm 93 làm đối số và áp dụng nó cho mọi giá trị trong từ điển, chuyển đổi giá trị đích thành bình phương của nóSau đó, 86 lấy một khóa hiện có làm đối số và xóa cặp khóa-giá trị tương ứng khỏi từ điển. Cuối cùng, 78 trả về 80 vì 97 không trống. Nó sẽ trả về 79 nếu từ điển cơ bản trốngLoại bỏ các quảng cáoXem xét hiệu suấtKế thừa từ 8 có thể ngụ ý chi phí hiệu năng vì lớp này bằng Python thuần túy. Mặt khác, lớp 7 tích hợp được viết bằng C và được tối ưu hóa cao cho hiệu suất. Vì vậy, nếu bạn cần sử dụng một từ điển tùy chỉnh trong mã quan trọng về hiệu suất, thì hãy đảm bảo tính thời gian cho mã của bạn để tìm các vấn đề về hiệu suất tiềm ẩnĐể kiểm tra xem các vấn đề về hiệu suất có thể phát sinh khi bạn kế thừa từ 8 thay vì 7 hay không, hãy quay lại lớp 90 của bạn và sao chép mã của nó vào hai lớp khác nhau, một lớp kế thừa từ 7 và lớp kia kế thừa từ 8Các lớp học của bạn sẽ trông giống như thế này 4Sự khác biệt duy nhất giữa hai lớp này là lớp con 06 7 và lớp con 08 8Để kiểm tra hiệu suất của chúng, bạn có thể bắt đầu bằng cách tính thời gian cho các hoạt động từ điển cốt lõi, chẳng hạn như khởi tạo lớp. Chạy đoạn mã sau trong phiên tương tác Python của bạn >>> 5Trong đoạn mã này, bạn sử dụng mô-đun cùng với hàm 11 để đo thời gian thực thi của một đoạn mã. Trong ví dụ này, mã đích bao gồm khởi tạo 06 và 08Khi bạn đã chạy mã đo thời gian này, thì bạn so sánh cả hai lần khởi tạo. Trong ví dụ cụ thể này, việc khởi tạo lớp dựa trên 8 chậm hơn so với lớp bắt nguồn từ 7. Kết quả này là một chỉ báo về sự khác biệt hiệu suất nghiêm trọngĐo thời gian thực hiện các chức năng mới cũng có thể thú vị. Ví dụ: bạn có thể kiểm tra thời gian thực hiện của 85. Để thực hiện kiểm tra này, hãy tiếp tục và chạy đoạn mã sau>>> 6Sự khác biệt về hiệu suất giữa lớp dựa trên 8 và lớp dựa trên 7 lần này không lớn lắm, nhưng nó vẫn tồn tạiThông thường, khi bạn tạo một từ điển tùy chỉnh bằng cách phân lớp 7, bạn có thể mong đợi các thao tác từ điển tiêu chuẩn sẽ hiệu quả hơn trong lớp này so với lớp dựa trên 8. Mặt khác, chức năng mới có thể có thời gian thực hiện tương tự ở cả hai lớp. Làm thế nào bạn biết đó là cách hiệu quả nhất để đi? Điều đáng chú ý là nếu bạn đang muốn sửa đổi chức năng cốt lõi của từ điển, thì 8 có lẽ là cách tốt nhất vì trong trường hợp này, bạn sẽ chủ yếu viết lại lớp 7 bằng Python thuần túyPhần kết luậnBây giờ bạn đã biết cách tạo các lớp giống như từ điển tùy chỉnh với hành vi được sửa đổi và các chức năng mới. Bạn đã học cách làm điều này bằng cách trực tiếp phân lớp con lớp 7 có sẵn và bằng cách kế thừa từ lớp 8 có sẵn trong mô-đun 2Trong hướng dẫn này, bạn đã học cách
Bạn cũng đã viết một số ví dụ thực tế giúp bạn hiểu những ưu và nhược điểm của việc sử dụng 8 so với 7 khi tạo các lớp từ điển tùy chỉnh của mìnhBây giờ bạn đã sẵn sàng để tạo từ điển tùy chỉnh của mình và tận dụng toàn bộ sức mạnh của loại dữ liệu hữu ích này trong Python để đáp ứng nhu cầu mã hóa của bạn Tham gia ngay. Nhấp vào đây để tham gia Bản tin Python thực sự và bạn sẽ không bao giờ bỏ lỡ một bài hướng dẫn, cập nhật khóa học hoặc bài đăng nào khác về Python Đá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ề Leodanis Pozo Ramos Leodanis là một kỹ sư công nghiệp yêu thích Python và phát triển phần mềm. Anh ấy là một nhà phát triển Python tự học với hơn 6 năm kinh nghiệm. Anh ấy là một nhà văn đam mê kỹ thuật với số lượng bài báo được xuất bản ngày càng tăng trên Real Python và các trang web khác » Tìm hiểu thêm về LeodanisMỗ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 Bartosz Geir Arne kate 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 » Bậc thầy 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 __ dict __ trong Python là gì?Tất cả đối tượng trong Python đều có thuộc tính __dict__, là đối tượng từ điển chứa tất cả các thuộc tính được xác định cho chính đối tượng đó . Việc ánh xạ các thuộc tính với các giá trị của nó được thực hiện để tạo từ điển.
Làm cách nào để kế thừa dict trong Python?Trong Python, bạn có thể làm điều này bằng cách kế thừa từ một lớp cơ sở trừu tượng, bằng cách trực tiếp phân lớp con lớp dict có sẵn hoặc bằng cách kế thừa từ UserDict . |