2008-11-03 39 views
7

Trong một chương trình mà tôi đang viết, tôi muốn tạo một ConfigParser chỉ đọc để nó có thể được sử dụng một cách an toàn trên toàn cầu. Tôi không nhận ra điều này, nhưng dường như các SafeConfigParser là một lớp học kiểu cũ, vì vậy tôi đã phải phân lớp nó như thế này:Có an toàn khi tạo lớp học kiểu cũ thành một lớp học kiểu mới sử dụng Multiple Inheritance không?

class ConstParser(SafeConfigParser, object): 
    """This is a implementation of the SafeConfigParser that can't 
     write any values. This is to ensure that it can only be filled 
     once and won't get messy with multiple modules writing to it.""" 
    def __init__(self, files, defaults={}): 
     super(ConstParser, self).__init__(defaults) 
     self.read(files) 
    def set(self, *args, **argd): 
     raise NotImplementedError() 
    def write(self, *args, **argd): 
     raise NotImplementedError() 
    def remove_option(self, *args, **argd): 
     raise NotImplementedError() 
    def remove_section(self, *args, **argd): 
     raise NotImplementedError() 

Nếu tôi không sử dụng đối tượng như một mixin, cuộc gọi đến SafeConfigParser của __init__ phương pháp không hoạt động. Bây giờ, tôi chắc chắn rằng có những cách tốt hơn để làm những gì tôi muốn làm, nhưng bây giờ tôi tò mò: là ok này để làm nói chung?

Ý tôi là, tôi không thể nghĩ ra bất kỳ lý do nào tại sao điều này sẽ là một điều xấu, nhưng nó vẫn mang lại cho tôi cảm giác xấu. Họ có biện minh hay tôi chỉ là hoang tưởng?

Trả lời

2

Thay thế các cuộc gọi:

super(ConstParser, self).__init__(defaults) 

với:

SafeConfigParser.__init__(self, defaults) 

và nó hoạt động tốt mà không cần nhiều Inheritance.

+0

Nhưng đó là phong cách cũ mà anh muốn tránh xa ... – Jake

+0

Không thực sự có lý do gì để buộc các lớp kiểu cũ tạo thành thư viện chuẩn, chúng hoạt động tốt như chúng. Nếu có lý do chính đáng để ConfigParser trở thành một lớp kiểu mới, thì bây giờ là ... –

+0

Thực ra có một lý do thực sự tốt: cấu trúc ngôn ngữ mới hơn (tức là descriptors> properties ..) không hoạt động với các lớp kiểu cũ ... – Jake

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