Tôi đã cố gắng tìm hiểu về metaclasses trong Python. Tôi có ý tưởng chính, nhưng tôi dường như không thể kích hoạt cơ chế. Như tôi đã hiểu, bạn có thể chỉ định M là metaclass khi xây dựng một lớp K bằng cách đặt __metaclass__
thành M ở cấp độ toàn cầu hoặc cấp lớp. Để kiểm tra điều này ra, tôi đã viết chương trình sau đây:Không nên __metaclass__ buộc việc sử dụng một metaclass trong Python?
p = print
class M(type):
def __init__(*args):
type.__init__(*args)
print("The rain in Spain")
p(1)
class ClassMeta:
__metaclass__ = M
p(2)
__metaclass__ = M
class GlobalMeta: pass
p(3)
M('NotMeta2',(), {})
p(4)
Tuy nhiên, khi tôi chạy nó, tôi nhận được kết quả như sau:
C:\Documents and Settings\Daniel Wong\Desktop>python --version Python 3.0.1 C:\Documents and Settings\Daniel Wong\Desktop>python meta.py 1 2 3 The rain in Spain 4
nên tôi không thấy "Mưa ở Tây Ban Nha" sau 1 và 2? Những gì đang xảy ra ở đây?
Dấu hai chấm "không ... không ép buộc" rất khó phân tích cú pháp. Bạn có thể sửa câu hỏi được không? –
Cảm ơn phản hồi. Tôi nghĩ rằng bây giờ phải dễ hiểu hơn. – allyourcode