2011-11-01 30 views
23

Đây thực sự là một số câu hỏi:Namespace, argparse, và sử dụng

  1. Có một lý do argparse sử dụng một không gian tên thay vì một từ điển?

  2. Giả sử tôi có một lớp học với __init__(self, init_method, *args). Tham số init_method cho init_function biết cách tôi muốn khởi tạo lớp, trong khi tham số arg cho tất cả các đối số không cần thiết cho init. Các đối số có thể khác nhau đối với các phương thức khác nhau. Tôi có nên sử dụng từ điển hay không gian tên không?

  3. Giả sử rằng tôi sử dụng không gian tên, làm cách nào để chuyển không gian tên tới __init__()?

Trả lời

19
  1. Các nhà thiết kế của arparse dường như cảm thấy nó sẽ là thuận tiện hơn để truy cập vào lập luận như

    args.arg_name 
    

    hơn

    args["arg_name"] 
    

    Điều này có thể là một vấn đề của hương vị, mặc dù . Tôi đã vui vẻ đi với từ điển, đặc biệt là với thực tế là không có lớp học Namespace trong thư viện chuẩn, ngoại trừ một trong số argparse.

  2. Sử dụng từ điển.

  3. Nếu bạn thực sự muốn có không gian tên tại đây, bạn có thể sử dụng init_function(**args.__dict__) ... nhưng tôi không khuyên bạn nên sử dụng nó.

67

Nó rất dễ dàng để chuyển đổi một Namespace thành một cuốn từ điển sử dụng vars():

>>> vars(args) 
+1

Tôi đang sử dụng này để tôi có thể có một mô-đun đó là hoặc là một tiện ích độc lập hoặc một chức năng . Lấy arg từ argparse, tôi có thể gọi: my_func (** vars (parser.args)), miễn là tôi làm cho các tên tham số của tôi khớp với tên tôi định nghĩa trong argparse –

Các vấn đề liên quan