Tôi có một metaclass:metaclass lỗi: Loại .__ init __() mất 1 hoặc 3 đối số
class MyMeta(type):
def __init__(cls, name, bases, dct):
# Do something
...
return super(MyMeta, cls).__init__(cls, name, bases, dct)
và một lớp:
class MyClass(object):
__metaclass__ = MyMeta
Khi tôi sử dụng những tôi nhận được lỗi sau:
E TypeError: Error when calling the metaclass bases
E type.__init__() takes 1 or 3 arguments
Vấn đề là gì và tại sao type.__init__()
lấy số lượng đối số chính xác thay đổi?
Lưu ý rằng 'siêu (MyMeta, cls) .__ init __ (tên, cơ sở, dct)' là cách * đúng * để thực hiện việc này, ngay cả trong 2.5 (và ngược lại là 2.2.) Trường hợp duy nhất bạn vượt qua 'cls' như là đối số đầu tiên là với' __new__', không phải với '__init__' (và điều đó cũng không cụ thể đối với' type' hoặc metaclasses.) Điều gì đã thay đổi là 'type .__ init __()' ngừng các ngoại lệ, giống như 'object .__ init __()'. –
@ julio.alegria http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ –
@HarleyHolcombe Tôi biết rằng trả lời câu hỏi của bạn được cho phép, nhưng ... 30 giây? Nó có nghĩa là câu trả lời đã sẵn sàng ngay cả trước khi bạn đăng câu hỏi, đó là điều lạ lùng – juliomalegria