Dường như thường __init__
phương pháp tương tự như sau:Python __init__ setattr trên đối số?
def __init__(self, ivar1, ivar2, ivar3):
self.ivar1 = ivar1
self.ivar2 = ivar2
self.ivar3 = ivar3
Có cách nọ cách kia để biến các đối số vào một danh sách (mà không cần đến *args
hoặc **kwargs
) và sau đó sử dụng setattr
để thiết lập các biến Ví dụ, với tên của tham số và đối số được truyền? Và có thể cắt danh sách, ví dụ: bạn cần phải cắt ít nhất thành [1:]
vì bạn không muốn self.self
.
(thực sự tôi đoán nó sẽ cần phải là một từ điển để giữ tên và giá trị)
như thế này:
def __init__(self, ivar1, ivar2, ivar3, optional=False):
for k, v in makedict(self.__class__.__init__.__args__): # made up __args__
setattr(self, k, v)
Cảm ơn!
Hưởng ứng Unknown của câu trả lời, tôi thấy điều này để làm việc:
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(dict([(k, v) for k, v in locals().iteritems() if k != 'self']))
hoặc
Class A(object):
def __init__(self, length, width, x):
self.__dict__.update(locals())
del self.__dict__['self']
Không quá xấu ..
dupe http://stackoverflow.com/questions/1389180/python-automatically-initialize-instance-variables – SilentGhost
xem thêm: http://stackoverflow.com/questions/739625/setattr-with-kwargs-pythonic-or-not – Imran