Tôi có đoạn như sau:động thêm các phương pháp lớp học để một lớp
FEED_TYPES = [
('fan_mail', 'Fan Mail'),
('review', 'Review'),
('tip', 'Tip'),
('fan_user', 'Fan User'),
('fan_song', 'Fan Song'),
('fan_album', 'Fan Album'),
('played_song', 'Played Song'),
('played_album', 'Played Album'),
('played_radio', 'Played Radio'),
('new_event', 'New Event'),
]
class Feed:
@classmethod
def do_create(cls, **kwargs):
print kwargs
@classmethod
def create(cls, type, **kwargs):
kwargs['feed_type'] = type
cls.do_create(**kwargs)
for type_tuple in FEED_TYPES:
type, name = type_tuple
def notify(self, **kwargs):
print "notifying %s" % type
self.create(type, **kwargs)
notify.__name__ = "notify_%s" % type
setattr(Feed, notify.__name__, classmethod(notify))
Feed.create("FanMail", to_profile="Gerson", from_profile="Felipe")
Feed.notify_fan_mail(to_profile="Gerson2", from_profile="Felipe2")
Ý tưởng là để tự động tạo ra một phương thức lớp (như notify_fan_mail) đối với từng loại thức ăn. Nó hoạt động gần như tuyệt vời, vấn đề duy nhất là báo cáo in luôn in "thông báo new_event", bất kể phương thức tôi gọi (giống với notify_new_mail, notify_review, v.v.).
Tôi nhận ra đó là vì nó đang sử dụng giá trị cuối cùng được gán cho loại. Câu hỏi của tôi là: làm cách nào tôi có thể tự động tạo các phương thức có thể sử dụng giá trị chính xác cho loại?
Ngoài ra, nếu tôi có mã chính xác này trong tệp Python, đó có phải là cách chính xác để thêm phương thức vào lớp Nguồn cấp dữ liệu hoặc có cách thanh lịch hơn không?
Cảm ơn bạn! Các dòng 'notify = make_notify (typ)' và 'notify .__ name__ =" notify_% s "% typ' nên sử dụng' type' (thay vì 'typ'), đúng không? – kolrie
Rất tiếc, 'self.create (type, ...)' phải là 'self.create (typ, ...)'.Ở khắp mọi nơi bạn đã viết 'loại', tôi đề nghị sử dụng một cái gì đó khác nhau, có thể' loại' thay thế - để hoàn toàn phân biệt nó với nội trang Python. – unutbu
Yêu thích khái niệm trang trí lớp học! – kolrie