Giả sử có một lớp với hàm tạo (hoặc hàm khác) lấy một số đối số và sau đó đặt chúng làm thuộc tính lớp có điều kiện.Làm thế nào bạn có thể thiết lập các thuộc tính lớp từ các đối số biến (kwargs) trong python
Tôi có thể đặt chúng theo cách thủ công, nhưng có vẻ như các thông số biến là đủ phổ biến trong python rằng cần có một thành ngữ phổ biến để thực hiện việc này. Nhưng tôi không chắc chắn làm thế nào để làm điều này tự động.
Tôi có ví dụ sử dụng eval, nhưng điều đó hầu như không an toàn. Tôi muốn biết cách thích hợp để làm điều này - có lẽ với lambda?
class Foo:
def setAllManually(self, a=None, b=None, c=None):
if a!=None:
self.a = a
if b!=None:
self.b = b
if c!=None:
self.c = c
def setAllWithEval(self, **kwargs):
for key in **kwargs:
if kwargs[param] != None
eval("self." + key + "=" + kwargs[param])
Dường như những câu hỏi tương tự như: http://stackoverflow.com/questions/3884612/automatically-setting-class-member- biến-in-python http://stackoverflow.com/questions/356718/how-to-handle-constructors-or-methods-with-a-different-set-or-type-of-argument http: // stackoverflow. com/questions/1446555/python-decorator-to-đảm bảo-that-kwargs-là-chính xác vì vậy nó trông giống như những gì tôi muốn là có lẽ này - self .__ dict __ [key] = kwargs [key] – fijiaaron
Không thực sự liên quan đến câu hỏi, nhưng bạn có thể muốn kiểm tra [PEP8] (http://www.python.org/dev/peps/pep-0008/) để biết một vài gợi ý về kiểu dáng Python thông thường. –
Có một thư viện tuyệt vời cho người được gọi là attrs này. đơn giản là 'pip install attrs', trang trí lớp của bạn với' @ attr.s', và đặt arg là 'a = attr.ib(); b = attr.ib() 'v.v. Đọc thêm [ở đây] (https://glyph.twistedmatrix.com/2016/08/attrs.html). –