Thường thì bạn không. Trường hợp sử dụng chính cho một metaclass là tạo một API. Một ví dụ điển hình là Django ORM.
Nó cho phép bạn định nghĩa một cái gì đó như thế này:
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
Và nếu bạn làm điều này:
guy = Person(name='bob', age='35')
print(guy.age)
Nó sẽ không trả về một đối tượng IntegerField. Nó sẽ trả về một int và thậm chí có thể lấy nó trực tiếp từ cơ sở dữ liệu.
Điều này có thể xảy ra bởi vì models.Model định nghĩa __metaclass__ và nó sử dụng một số phép thuật để biến Person bạn vừa định nghĩa bằng các câu lệnh đơn giản thành một hook phức tạp đối với một trường cơ sở dữ liệu.
Django làm cho một cái gì đó phức tạp trông đơn giản bằng cách hiển thị một API đơn giản và sử dụng metaclass, tạo lại mã từ API này để thực hiện công việc thực sự đằng sau.