2011-09-08 20 views
5

tôi quyết định sử dụng str để in nội dung của một cây trong cấu trúc cây giống, sử dụng một cái gì đó giống nhưTại sao str không thể nhận tham số thứ hai, khi __str__ có thể?

print tree 

Các nút của cây là mọi đối tượng của các lớp do người dùng tạo ra và tôi quá tải __str__ phương pháp kỳ diệu của họ để sử dụng str các nút con sau khi các tab t thụt lề như thế

def __str__ (self,t=0) :` 
    return t*'\t' + str(self.label) +':' +'\n'+ str(self.l,t+1)+'\n'+str(self.right,t+1)+'\n' 

Tuy nhiên tôi không thể gọi str với điều đó t tham số, nhưng tôi có thể gọi node.__ str__(t=4) .Isn't str, chỉ có phím tắt để sự kỳ diệu Hoặc là vì pa rser từ chối các tham số bổ sung cho str mà không kiểm tra phương pháp ma thuật?

P.S. Tôi quan tâm đến hành vi này. Tôi biết đó không phải là cách tốt nhất để in cây, đó là một hack;)

Trả lời

7

Hãy tưởng tượng theo cách này.

def str(obj): 
    try: 
     return obj.__str__() 
    except ...: 
     ... 

Chỉ vì __str__ có thể mất nhiều tham số, không có nghĩa là str được cấu hình để vượt qua những thông số thông qua.

+0

nhưng nếu str hoạt động như trong ví dụ của bạn, nó sẽ hoạt động nếu obj .__ str __() không dẫn đến ngoại lệ.Và nó không có trong trường hợp của tôi. –

+0

tôi đã nhận nó, xin lỗi;) –

+0

@Alexander Ivanov: '...' trong mã là * bỏ qua mã *, chỉ cho mục đích minh họa. Tôi không có ý định thực hiện hoàn chỉnh 'str'. –

1

Nếu bạn có một Class C với một mã vạch __str__(self, t=0), str(c) sẽ gọi C.__str__(c) đặt giá trị bằng 0 theo tuyên bố. str() chính nó chỉ chấp nhận một đối số.

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