2010-03-14 31 views

Trả lời

2

tôi muốn nghe ý kiến ​​nhân dân về vấn đề này, nhưng tôi nghĩ rằng đây là một ví dụ về những gì bạn muốn làm

class FactoryMetaclassObject(type): 
    def __init__(cls, name, bases, attrs): 
     """__init__ will happen when the metaclass is constructed: 
     the class object itself (not the instance of the class)""" 
     pass 

    def __call__(*args, **kw): 
     """ 
     __call__ will happen when an instance of the class (NOT metaclass) 
     is instantiated. For example, We can add instance methods here and they will 
     be added to the instance of our class and NOT as a class method 
     (aka: a method applied to our instance of object). 

     Or, if this metaclass is used as a factory, we can return a whole different 
     classes' instance 

     """ 
     return "hello world!" 

class FactorWorker(object): 
    __metaclass__ = FactoryMetaclassObject 

f = FactorWorker() 
print f.__class__ 

Kết quả bạn sẽ thấy là: gõ 'str'

+0

bạn có thể thêm một chút "yếu tố" vào ví dụ này không, tức là một số tùy chỉnh được áp dụng cho các đối tượng đã tạo? – olamundo

0

Không cần thiết. Bạn có thể override a class's __new__() method để trả về một loại đối tượng hoàn toàn khác.

+0

Tôi không nghĩ rằng bạn có thể với metaclasses ... (có thể bạn có thể - nếu như vậy cho tôi biết và tôi sẽ học được điều gì đó :)) – RyanWilcox

2

Bạn có thể tìm thấy một số ví dụ hữu ích tại wikibooks/python, herehere

+1

các liên kết tôi tình cờ gặp phải. Tôi không thể tìm thấy một ví dụ cụ thể của một nhà máy (mặc dù tất cả đều đề cập đến nó) trong bất kỳ nhà máy nào ... – olamundo

Các vấn đề liên quan