Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Mô-đun Toán
Sự soi xét mã
Mục tiêu
Kiểm tra một số vật dụng cũ bị giấu kín trong gác xép bằng cách sử dụng kiểm tra mã (code introspection) để tìm hiểu chúng là gì và cách chúng được sử dụng.
Gác xép có một văn phòng hiếm khi được sử dụng và có một vài rương cũ chứa các vật có giá trị đã bị lãng quên từ lâu. Trừ khi có thông báo khác hoặc trừ khi một bản ghi nhớ cung cấp thông tin, đôi khi có thể khá khó để nhận dạng các vật dụng, hoặc các hằng số được thu thập trong lĩnh vực. Không những thế, việc nhận định phạm vi các thao tác có thể thực hiện với một đối tượng cụ thể hoặc những thuộc tính của nó cũng có thể gặp khó khăn. Để khắc phục điều đó, chúng ta có thể sử dụng Code Introspection.
Code Introspection cho phép chúng ta kiểm tra và nhận dạng một số đoạn mã nhất định cũng như chỉ ra một số thuộc tính của nó. Để làm điều này, chúng ta sẽ sử dụng bốn (4) hàm kiểm tra tích hợp sẵn được đóng gói trong mã python cơ bản: type(), id(), repr(), dir() và help(). Chúng hoạt động như sau:
type(): Hàm này thông báo cho bạn biết đối tượng được truyền vào là kiểu nào. Ví dụ, nếu bạn truyền một biến làm đối số, hàm sẽ nhận dạng đối tượng đó là một biến.id(): Mỗi đối tượng được tạo ra trong python đều có một id duy nhất nhận dạng đối tượng đó trong mã. Bằng cách truyền đối tượng làm đối số của hàm này, nó sẽ trả về id duy nhất của đối tượng.repr(): Chuyển đổi một giá trị không phải chuỗi thành một chuỗi, hữu ích cho việc chuyển đổi dữ liệu thành dạng có thể đọc được.dir(): Hiển thị tất cả các thuộc tính mà đối tượng có, hữu ích để biết được đối tượng cụ thể có thể thực hiện những gì.help(): Hiển thị tất cả thông tin về đối tượng, hàm, lớp, v.v. có sẵn trong danh mục của python.
Ngoài ra, chúng ta còn có một hàm bất đồng bộ mới là hàm display(). Hàm này tương tự như hàm read() nhưng cho phép bạn hiển thị dữ liệu động, rất giống với các hàm kiểm tra mã vốn tạo ra dữ liệu động. Cú pháp của nó như sau: await player.display(-data-). Tất cả các hàm này sẽ hữu ích cho việc phân tích dữ liệu, điều này rất cần thiết khi chúng ta sử dụng các phương thức và bắt đầu nhập khẩu các hàm mới cũng như khi phân tích bất kỳ mã nào mà chúng ta muốn nhận biết thuộc tính của nó.
Chúng ta sẽ sử dụng các hàm này để nhận dạng và lập danh mục các vật phẩm được cất giữ trong gác xép. Để bắt đầu, hãy đi đến dấu X tối trên thảm màu, bắt đầu với dấu X trên thảm đỏ. Có ba (3) hằng số trong khu vực này: red_container, green_container và blue_container, các hằng số này đại diện cho các thùng chứa trong mỗi rương tương ứng với từng tấm thảm có màu.
Với mỗi dấu X, hãy đối mặt với rương và sử dụng hàm open() để mở rương, sử dụng hàm collect() với hằng số của tấm thảm có màu tương ứng để lấy chúng ra khỏi rương. Sử dụng hàm kiểm tra type() để nhận dạng kiểu của hằng số trong rương, đầu ra mà nó tạo ra là dữ liệu thô và đối với điều này chúng ta sử dụng hàm repr() để chuyển đổi nó thành một chuỗi. Sử dụng hàm speak() để hiển thị chuỗi kết quả từ việc kết hợp các hàm và hằng số, ví dụ: player.speak(repr(type(red_container))). Tiếp theo, sử dụng hàm speak() với hằng số để nhận diện nội dung trực tiếp, ví dụ: player.speak(red_container).
Sau khi đã thu thập, kiểm tra và nhận dạng cả ba (3) hằng số, hãy đi đến dấu X sáng phía trước chiếc bàn làm việc. Tạo ba biến với tên: item_id_red, item_id_green, item_id_blue, những biến này sẽ được sử dụng để lưu trữ số nhận dạng cho mỗi hằng số bạn đã thu thập. Sử dụng hàm kiểm tra id() để lấy số nhận dạng duy nhất của hằng số bằng cách thêm nó làm đối số. Ghép tên của biến với tên của hằng số theo định dạng ví dụ: item_id_red = id(red_container), làm việc này cho cả ba (3) biến và hằng số.
Sau khi tất cả ba (3) biến đã được khởi tạo, hãy lưu chúng vào một danh sách có tên item_list và tại dấu X sáng hãy sử dụng hàm display() để đảm bảo nó được ghi chú trong bản ghi nhớ trên bàn, như sau: await player.display(item_list).
Bây giờ khi danh sách đã được lập bảng, hãy đi đến dấu X tối trên thảm tím và đối diện với chiếc bàn làm việc. Ở đây, chúng ta sẽ sử dụng hàm dir() để nhận dạng các thuộc tính mà danh sách có, tuy nhiên đầu ra là dữ liệu thô và có thể khó hiển thị. Vì vậy, chúng ta sử dụng hàm repr() để chuyển đổi dữ liệu thành một chuỗi có thể đọc được. Tạo một biến có tên item_attributes và lưu trữ chuỗi kết quả, như sau: item_attributes = repr(dir(item_list)). Cuối cùng, sử dụng hàm display() để đảm bảo nó được ghi chú trong bản ghi nhớ trên bàn.
Hãy đi đến dấu X tối trên thảm trắng để làm điều tương tự như bạn đã làm với dir() nhưng với help(), điều này sẽ phác thảo tất cả tài liệu sử dụng của đối tượng. Tạo một biến có tên item_help và lưu trữ chuỗi kết quả, như sau: item_help = repr(help(item_list)). Cuối cùng, sử dụng hàm read() để đảm bảo nó được ghi chú trong bản ghi nhớ trên bàn nhằm hoàn thành cấp độ.