2013-04-11 42 views
6

Tôi đang cố gắng tìm ra cách lặp qua tệp cấu hình json và sử dụng tên khóa làm tên đối số cho phương thức sử dụng ** kwargs. Tôi đã tạo một tệp cấu hình json và sử dụng các tên khóa làm phương thức. Tôi chỉ cần thêm "set_" vào tên khóa để gọi đúng phương thức. Tôi chuyển đổi json thành một từ điển để lặp qua bất kỳ giá trị mặc định nào. Tôi muốn chuyển tên đối số sang ** kwargs bằng biến chuỗi. Tôi đã cố gắng để vượt qua một từ điển nhưng nó không có vẻ như thế.Sử dụng biến chuỗi ** kwargs làm đối số có tên

user_defaults = config['default_users'][user] 

for option_name, option_value in user_defaults.iteritems(): 
    method = "set_" + option_name 
    callable_method = getattr(self, method) 
    callable_method(user = user, option_name = user_defaults[option_name]) 

Gọi callable_method ở trên chuyển "option_name" làm tên thực tế của kwarg. Tôi muốn vượt qua nó để khi "shell" = option_name rằng nó được thông qua như là tên chuỗi cho tên đối số. Một ví dụ dưới đây. Bằng cách đó tôi có thể lặp qua bất kỳ khóa nào trong cấu hình và không lo lắng về những gì tôi đang tìm kiếm trong bất kỳ phương thức nào tôi viết để thực hiện điều gì đó.

def set_shell(self, **kwargs): 
    user = kwargs['user'] 
    shell = kwargs['shell'] 

    ## Do things now with stuff 

Bất kỳ trợ giúp nào được đánh giá cao Tôi mới làm quen với python và vẫn học cách làm mọi thứ theo cách nhiệt tình.

Trả lời

19

Nếu tôi hiểu chính xác những gì bạn đang yêu cầu, bạn chỉ có thể sử dụng cú pháp ** ở phía gọi để chuyển một dict được chuyển thành kwargs.

callable_method(user=user, **{option_name: user_defaults[option_name]}) 
+0

Thật tuyệt vời, đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn đã phản ứng nhanh chóng. – lumberjacked

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