2012-05-30 38 views

Trả lời

17

Có hợp lệ. Lớp được xác định bởi thời gian bạn tạo một đối tượng và gọi phương thức returnTest.

In [2]: x = Test() 

In [3]: y = x.returnTest() 

In [4]: y 
Out[4]: <__main__.Test instance at 0x1e36ef0> 

In [5]: 

Tuy nhiên, trong trường hợp phương pháp hoạt động như nhà máy, bạn có thể muốn xem xét sử dụng trang trí classmethod. Khi thừa kế và phiền toái khác đi vào con đường, điều này có thể giúp đỡ.

1

Có, nó hợp lệ. returnTest sẽ không chạy cho đến khi nó được gọi. Nó không tạo ra một vòng lặp vô hạn, vì phương thức này không được gọi trên đối tượng mới được tạo ra.

0

Có. Đó là một mã python hợp lệ. Nhiều ngôn ngữ lập trình cho phép trả về một thể hiện của một lớp đang được định nghĩa. Hãy nghĩ đến mẫu singleton.

0

Có, nó hoạt động nhưng có vẻ như returnTest() luôn là cùng một ví dụ về Kiểm tra.

class Test: 
    def __init__(self): 
    self.number = 5 

    def returnTest(self): 
    return Test() 


t = Test() 
print t 
print t.returnTest() 
print t.returnTest() 


$ python te.py 
<__main__.Test instance at 0xb72bd28c> 
<__main__.Test instance at 0xb72bd40c> 
<__main__.Test instance at 0xb72bd40c> 

Điều này đúng với Python 2.7 và 3.2. @classmethod không tạo ra sự khác biệt. Điều thú vị đủ, pypy trả về một ví dụ khác nhau mỗi lần:

$ pypy te.py 
<__main__.Test instance at 0xb6dcc1dc> 
<__main__.Test instance at 0xb6dcc1f0> 
<__main__.Test instance at 0xb6dcc204> 
+10

Hãy thử lưu trữ kết quả t.returnTest() vì nếu bạn không làm như vậy, nó có thể là rác được thu thập và dường như bạn có cùng một ví dụ được trả về nhưng nó chỉ là cùng một địa chỉ, tái chế. – kasyc

+2

Đó là một suy nghĩ tuyệt vời. Lưu trữ các kết quả vào danh sách tiếp tục tạo các đối tượng khác nhau. –

+1

+1 của tôi với kasyc. Tôi đang sử dụng Python 2.7.1 trên Windows. Nếu không lưu trữ các tài liệu tham khảo, tôi cũng có thể quan sát việc tái sử dụng/tái chế không gian thu gom rác được đề cập bởi kasyc. – pepr

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