Tôi luôn thiết lập metaclasses một cái gì đó như thế này:Có lý do nào để chọn __new__ trên __init__ khi xác định metaclass không?
class SomeMetaClass(type):
def __new__(cls, name, bases, dict):
#do stuff here
Nhưng tôi chỉ tình cờ gặp một metaclass mà được định nghĩa như thế này:
class SomeMetaClass(type):
def __init__(self, name, bases, dict):
#do stuff here
Có lý do nào để thích một trong khác ?
Cập nhật: Lưu ý rằng tôi hỏi về cách sử dụng __new__
và __init__
trong metaclass. Tôi đã hiểu sự khác biệt giữa chúng trong lớp khác. Nhưng trong một metaclass, tôi không thể sử dụng __new__
để thực hiện bộ nhớ đệm vì __new__
chỉ được gọi khi tạo lớp trong một metaclass.
Rõ ràng hơn nhiều. Và điều đó có ý nghĩa. Có lý do nào để sử dụng '__init__' không? –
'__new__' có thể làm mọi thứ mà' __init__' có thể làm, nhưng không phải là cách khác. '__init__' có thể thuận tiện hơn khi sử dụng, giống như cách' __new__' và '__init__' liên quan đến việc khởi tạo lớp thông thường. Bạn phải nhớ trả về một cái gì đó từ '__new__' chẳng hạn, nhưng với' __init__' bạn thì không. –
@JasonBaker Tôi nhận ra đây là một chủ đề cũ 5 năm và tôi không mong đợi để nhận được bất kỳ trả lời. Bạn sẽ không muốn sử dụng __init__ bất cứ khi nào bạn cần để tạo ra một instantiation của lớp trong câu hỏi. Giống như [mô hình trọng lượng] (http://en.wikipedia.org/wiki/Flyweight_pattern). –