Thứ năm, 12/12/2019 | 00:00 GMT+7

Cách tạo trình tạo lớp Python cho mã VS

Nếu bạn không thích khai thác các lớp Python, đây là cách bạn có thể tạo tiện ích mở rộng trong Visual Studio Code để làm điều đó cho bạn. Trong bài viết này, bạn sẽ thấy cách tạo tiện ích mở rộng đó. Ta sẽ sử dụng một số kỹ thuật để thực hiện .

  • Nhắc user nhập
  • Bản đồ mảng và các hàm nối
  • Chữ viết mẫu ES6
  • Ghi vào Hệ thống file

Bạn sẽ tạo một phần mở rộng mới, nhắc user nhập, chuyển đổi đầu vào thành một chuỗi đại diện cho file lớp mới và ghi ra kết quả.

Trình tạo lớp Python

Tạo dự án

Để bắt đầu phát triển phần mở rộng Mã, bạn cần cài đặt hai gói NPM khác nhau, “yo” và “mã tạo”.

Để tạo dự án của bạn, hãy chạy lệnh sau.

yo code 

Điều này sẽ tiếp theo bằng cách hỏi bạn một số câu hỏi về dự án của bạn. Chọn JavaScript hoặc TypeScript cho tiện ích mở rộng của bạn.

Chọn JavaScript hoặc TypeScript

Sau khi trả lời tất cả các câu hỏi, hãy mở dự án mới được tạo trong VS Code.

Mở dự án mới trong VS Code

Bạn sẽ có một số file khác nhau được tạo cho mình, hai file quan trọng nhất là file package.jsonextension.js .

Xem các file  đã tạo

Bắt đầu bằng cách mở file extension.js . Sau đó, đổi tên tên lệnh mở rộng thành createPyClass .

Đổi tên tên lệnh mở rộng

Sau đó, trong file package.json , đổi tên sự kiện và lệnh kích hoạt để trùng với tên của lệnh.

Đổi tên sự kiện và lệnh kích hoạt

Cập nhật tiêu đề cũng là những gì user sẽ nhập để kích hoạt lệnh.

Đang cập nhật tiêu đề

Để chạy tiện ích mở rộng, hãy mở bảng gỡ lỗi (trông giống như một lỗi) và nhấn phát. Điều này sẽ mở ra một version VS Code mới. Mở dấu nhắc lệnh ( Command + Shift + P trên Mac và Control + Shift + P trên Windows) và nhập “Tạo lớp Python”.

Sử dụng lệnh mới

Và bạn sẽ thấy thông báo "Hello World".

Lệnh mới đã bắt đầu thành công

Nhắc user nhập liệu

Ta cần nhắc user nhập liệu về lớp (tên lớp và thuộc tính) và chuyển đổi đầu vào đó thành một chuỗi mà ta có thể ghi vào file lớp mới.

Hãy bắt đầu bằng cách đảm bảo user hiện có một folder đang mở. Nếu không, ta không có nơi để ghi file lớp mới vào. Nếu user không mở folder , ta sẽ hiển thị thông báo lỗi và quay lại.

if (!vscode.workspace.workspaceFolders) {   return vscode.window.showErrorMessage(     "Please open a directory before creating a class."   ); } 

Bây giờ, ta có thể hỏi user tên của lớp mà họ muốn tạo. Nếu user , vì lý do nào đó, đóng dấu nhắc đầu vào (bằng cách nhấn thoát), ta sẽ trả lại.

const className = await vscode.window.showInputBox({   prompt: "Class Name?" });  if (!className) return; 

Ta muốn cho phép user nhập bao nhiêu thuộc tính mà họ muốn. Đối với điều này, ban đầu ta nhắc cho một thuộc tính, sau đó chạy một vòng lặp while truy xuất các thuộc tính cho đến khi user nhập “xong”.

let count = 1; let property = await vscode.window.showInputBox({   prompt: `Property #${count}? ('done' when finished)` }); const properties = []; while (property != "done") {   properties.push(property);   count++;   property = await vscode.window.showInputBox({     prompt: `Property #${count}? ('done' when finished)`   }); } 

Chạy lại tiện ích mở rộng của bạn, nhập các thông tin đầu vào hợp lệ và in thông tin của user đảm bảo rằng nó trông đúng.

Tạo chuỗi nội dung lớp học

Bây giờ, ta bắt đầu lấy đầu vào của user để tạo ra nội dung của lớp. Hãy bắt đầu bằng cách tạo dòng định nghĩa lớp cũng như định nghĩa phương thức khởi tạo.

const classDefinition = `class ${className}:`; const constructorDefinition = `def __init__(self, ${properties.join(", ")}):`; 

Sau đó, ta có thể tạo các dòng gán hàm tạo. Đây là nơi user sẽ tự khởi tạo các biến, sử dụng các giá trị của các tham số của hàm tạo. Đối với điều này, ta sử dụng map (như ta sẽ làm từ bây giờ) để chuyển đổi từng đầu vào thuộc tính theo một cách nào đó.

const constructorAssignments = properties   .map(property => `self.${property} = ${property}\n\t\t`)   .join(""); 

Bây giờ, đối với mỗi thuộc tính, ta tạo một hàm getter. , ta sử dụng map để chuyển đổi mỗi thuộc tính thành một chuỗi đại diện cho getter của nó.

const classGetters = properties   .map(     property => `\tdef get_${property}(self):\n\t\treturn self.${property}\n\n`   )   .join(""); 

Điều cuối cùng ta muốn tạo là hàm chuỗi sẽ cho Python biết cách in đối tượng này. , ta sử dụng hàm map để chuyển đổi từng thuộc tính bằng cách in tên của thuộc tính và sau đó là giá trị của nó.

Lưu ý trong giá trị trả về của bản đồ, ta đang thêm dấu phẩy và dấu cộng. Điều này nghĩa là đối với thuộc tính cuối cùng, ta sẽ thêm các ký tự không cần thiết vào cuối. Vì lý do này, ta chuyển đổi mảng kết quả thành một chuỗi và cắt 11 ký tự cuối cùng bằng cách sử dụng splice .

const dunderStrString = `\tdef __str__():\n \t\treturn ${properties   .map(property => '"' + property + ': "' + " + " + property + ' + " , " + ')   .join("")   .slice(0, -11)}`; 

Hãy lấy từng phần này và ghép chúng lại với nhau!

const classString = `${classDefinition}     ${constructorDefinition}         ${constructorAssignments} ${classGetters} ${dunderStrString}`; 

Tạo một câu lệnh log và chạy lại điều này đảm bảo rằng chuỗi lớp của bạn trông ổn.

Tạo file lớp

Bây giờ, ta cần ghi chuỗi đó vào một file mới. Để làm việc với các file , ta cần nhập các module “fs” và “đường dẫn” từ Node ở đầu trang.

const fs = require("fs"); const path = require("path"); 

Sau đó, ta cần lấy đường dẫn cho folder hiện đang mở của user . Bạn có thể lấy tham chiếu đến các folder đang mở bằng vscode.workspace.workspaceFolders . Sau đó, ta lấy cái đầu tiên từ mảng kết quả, lấy URI của nó và chuyển nó thành một chuỗi. Chuỗi đường dẫn kết quả bao gồm một tiền tố, vì vậy ta loại bỏ nó bằng cách tách trên dấu hai chấm và lấy những gì đứng sau dấu hai chấm.

const folderPath = vscode.workspace.workspaceFolders[0].uri   .toString()   .split(":")[1]; 

Bây giờ ta có thể sử dụng module fs, đường dẫn folder và tên của file lớp, để ghi chuỗi lớp vào file mới của ta .

fs.writeFile(path.join(folderPath, `${className}.py`), classString, err => {}); 

Ta có thể tiến thêm một bước nữa bằng cách cung cấp cho user một số phản hồi dựa trên việc ghi file có thành công hay không.

fs.writeFile(path.join(folderPath, `${className}.py`), classString, err => {   if (err) {     vscode.window.showErrorMessage("Something went wrong");     return console.log(err);   }   vscode.window.showInformationMessage(`${className} Class created.`); }); 

Chạy nó

Làm mới version gỡ lỗi của bạn hoặc bắt đầu lại theo các bước ở trên. Với version gỡ lỗi của VS Code đang mở, hãy chạy lại lệnh “Tạo lớp Python”. Sau đó, nhập tên lớp bạn muốn tạo. "Người" trong trường hợp này.

Vào hạng Người

Sau đó nhập thuộc tính của bạn, “tên” trước.

Nhập thuộc tính tên

Sau đó là "tuổi".

Nhập thuộc tính tuổi

Sau đó, "xong" để kết thúc.

Nhập "xong" để hoàn thành

Tệp được tạo thành công.

Tệp được tạo thành công

Sau đó, hãy kiểm tra kỹ file của bạn đã thực sự được tạo và nó có vẻ tốt

Xem lớp trong VS Code

Kết luận

Trong hướng dẫn này, bạn đã tạo một tiện ích mở rộng để giải quyết một vấn đề cụ thể. Nó cung cấp cơ hội để tìm hiểu thêm về VS Code, và nó cũng là thứ mà những người khác sẽ được hưởng lợi từ đó.


Tags:

Các tin liên quan

Cách quản lý Python với Pyenv và Direnv
2019-12-12
Cách thực hiện phân tích cảm xúc trong Python 3 bằng Bộ công cụ ngôn ngữ tự nhiên (NLTK)
2019-09-26
Cách thiết lập một sổ ghi chép Jupyter với Python 3 trên Debian 10
2019-08-29
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên macOS
2019-08-16
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên macOS
2019-08-16
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên macOS
2019-08-16
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên Debian 10
2019-08-05
Cách cài đặt bản phân phối Python Anaconda trên Debian 10
2019-07-09
Cách cài đặt Phân phối Python Anaconda trên Ubuntu 18.04
2019-04-18
Cách áp dụng thị giác máy tính để xây dựng bộ lọc chó dựa trên cảm xúc trong Python 3
2019-04-03