Tôi đang gọi một hàm tạo trong ClassA và muốn có đối tượng kết quả là một lớp khác (ClassB) nếu một điều kiện nhất định được đáp ứng. Tôi đã thử thay thế các đối số đầu tiên để __init __() ('tự' trong ví dụ dưới đây) trong vòng __init __() nhưng nó dường như không làm những gì tôi muốn.Làm thế nào để thay thế một thể hiện trong __init __() bằng một đối tượng khác?
trong chính:
import ClassA
my_obj = ClassA.ClassA(500)
# unfortunately, my_obj is a ClassA, but I want a ClassB!
trong ClassA/__ init__.py:
import ClassB
class ClassA:
def __init__(self,theirnumber):
if(theirnumber > 10):
# all big numbers should be ClassB objects:
self = ClassB.ClassB(theirnumber)
return
else:
# numbers under 10 are ok in ClassA.
return
trong ClassB/__ init__.py:
class ClassB:
pass
Ok, bây giờ nếu tôi muốn hoán đổi đối tượng bằng đối tượng mới bên trong phương thức đối tượng, thay vì trong hàm tạo? Tôi muốn một vật thể biến thành vật thể khác trong vòng đời của nó. – sneak
@sneak, bạn không thể: phương thức được 'tự' làm đối số và vì vậy bất cứ điều gì họ có thể rebind để nói tên mã nó sẽ không có bất kỳ tác dụng bên ngoài phương pháp. (Tất nhiên bạn có thể đổi tên ** các tên ** đủ điều kiện như 'self .__ class__' - tên và tên gọi đủ điều kiện hoàn toàn khác nhau về mọi khía cạnh bạn có thể nghĩ đến). –
@ Alex, thực tế là bạn có thể gán cho 'self .__ class__' là một tai nạn thực hiện trong CPython; thông số python chính thức nói rằng điều này * không nên * hoạt động. Thậm chí nếu nó không phải là một tai nạn, đó là một điều khá khủng khiếp để làm. Trong ngắn hạn: xin vui lòng không, và đặc biệt là xin vui lòng không đề nghị nó cho người khác. – habnabit