2009-11-26 36 views

Trả lời

116

Giá trị đối số mặc định được đánh giá tại hàm xác định thời gian, nhưng self là đối số chỉ khả dụng tại thời gian gọi hàm. Vì vậy các đối số trong danh sách đối số không thể tham chiếu lẫn nhau.

Đó là một mô hình phổ biến để mặc định một cuộc tranh cãi để None và thêm một kiểm tra cho rằng trong mã:

def p(self, b=None): 
    if b is None: 
     b = self.a 
    print b 
+0

Mặc dù tôi nghĩ rằng ở trên không phải là rất đẹp (tôi đến từ ruby ​​nơi mọi thứ chỉ hoạt động tốt), trên thực sự hoạt động như một workaround. Nó vẫn còn lúng túng mà python đã chọn để làm cho tự không có sẵn trong một danh sách tham số. – shevy

14

Đối với trường hợp bạn cũng muốn có tùy chọn thiết lập 'b' để None:

def p(self, **kwargs): 
    b = kwargs.get('b', self.a) 
    print b 
+1

Không chắc chắn những gì quá phức tạp về nó. Cảm thấy tự do để kêu vang với giải pháp của riêng bạn mà bảo toàn tất cả các giá trị của b. – Andrew

1

Nếu bạn đã đến đây thông qua google, hãy đảm bảo rằng bạn đã tự cho mình tham số đầu tiên cho một hàm lớp. Đặc biệt là nếu bạn cố gắng tham chiếu các giá trị cho đối tượng đó bên trong hàm.

def foo(): 
    print(self.bar) 

> NameError: tên 'tự' không được định nghĩa

def foo(self): 
    print(self.bar) 

> "Chúc mừng bạn đã thoát khỏi những NameError!"

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