Tôi đã một lớp định nghĩa như sauLàm thế nào để vượt qua đối số argparse để hoạt động như kwargs?
class M(object):
def __init__(self, **kwargs):
...do_something
và tôi có kết quả của argparse.parse_args()
, ví dụ:
> args = parse_args()
> print args
Namespace(value=5, message='test', message_type='email', extra="blah", param="whatever")
Tôi muốn truyền lại các giá trị của không gian tên này (trừ message_type
) để tạo một thể hiện của lớp M
. Tôi đã cố gắng
M(args)
nhưng có một lỗi
TypeError: __init__() takes exactly 1 argument (2 given)
mà tôi không hiểu. Làm thế nào tôi có thể
- loại bỏ các giá trị
message_type
từ danh sách trongargs
- vượt qua trên các giá trị như thể tôi sẽ gõ
M(value=5, message='test', extra="blah", param="whatever")
trực tiếp.
Thats chính xác những gì tôi cần. Cảm ơn. Ngoại trừ việc loại bỏ khóa nhất định. Tôi cần nó để được loại bỏ, tôi không thể bỏ qua nó vì những lý do nằm ngoài phạm vi của câu hỏi này. – Alex
Tôi đề nghị làm 'arg_dict = dict ((k, v) cho k, v trong vars (args) .items() nếu k! =" Message_type ")' để tránh hành vi không xác định có thể với 'vars'. – Alex
@ Alex: hành vi không xác định với 'vars' là gì? Bạn có thể lọc ra khóa 'message_type' theo cách đó, chắc chắn, nhưng làm điều đó vì lợi ích riêng của nó, không phải vì' vars() 'có thể có hành vi không xác định (mà nó không). –