2014-12-27 16 views
10

Tôi hiện đang cố gắng triển khai một số thừa kế trong dự án Python của mình và đã nhấn một khối đường. Tôi đang cố gắng tạo ra một baseParentClass sẽ xử lý các chức năng cơ bản cho rất nhiều lớp con. Trong ví dụ cụ thể này, tôi đang cố gắng khởi tạo một cá thể với một số thuộc tính (được đặt là 0), được lưu trữ dưới dạng một danh sách biến lớp (được gọi là ATTRS) trong Child. Tôi không chắc chắn về cách sử dụng ATTRS này trong lớp cha.Lớp cha mẹ truy cập lớp biến lớp con của lớp

class Parent(object): 
    def __init__(): 
     for attr in ATTRS: 
      setattr(self, attr, 0) 

class Child(Parent): 
    #class variable 
    ATTRS = [attr1, attr2, attr3] 

    def __init__(): 
     super(Child, self).__init__() 

Tôi có thể lưu trữ attrs như self.ATTRS ở trẻ em, và sau đó sử dụng self.ATTRS trong Chánh thành công, nhưng có vẻ như thích hợp hơn để tôi có họ được lưu trữ như là một biến lớp.

Ngoài ra tôi có thể vượt qua attrs như một tham số như sau:

class Child(Parent): 
    #class variable 
    ATTRS = [attr1, attr2, attr3] 

    def __init__(): 
     super(Child, self).__init__(ATTRS) 

nhưng tôi đang tự hỏi liệu điều này bằng cách nào đó đánh bại điểm của việc sử dụng thừa kế ở nơi đầu tiên?

Tôi rất biết ơn vì bất kỳ ý tưởng, gợi ý hoặc phản hồi nào cho dù tôi đang sủa cây sai hoàn toàn!

Cảm ơn

+0

Điều gì xảy ra khi bạn dùng thử? –

Trả lời

5

Bạn đã đóng cửa. Đây hoạt động:

class Parent(object): 
    def __init__(self): 
     for attr in self.ATTRS: 
      setattr(self, attr, 0) 

class Child(Parent): 
    #class variable 
    ATTRS = ['attr1', 'attr2', 'attr3'] 

    def __init__(self): 
     super(Child, self).__init__() 

Ở đây, bạn thiết lập danh sách ATTRS ở cấp lớp, và thuận tiện truy cập nó trong self.ATTRS tại baseclass của __init__.

+1

Rực rỡ, cảm ơn sự giúp đỡ nhanh chóng! –

0

Thêm vào câu trả lời ở trên,

Mặc dù ATTR là một biến lớp trong lớp trẻ, biến thể hiện của lớp con có thể truy cập các biến lớp ATTR vì, Python thực hiện bằng cách sử dụng không gian tên sau

  1. Kiểm tra không gian tên của cá thể (tự. dict) cho biến ATTR.
  2. Nếu phần trên không thành công thì nó sẽ kiểm tra không gian tên của lớp của nó. Vì vậy, nó có thể nhận được giá trị của biến lớp mặc dù nó được truy cập bằng cách sử dụng biến cá thể.
Các vấn đề liên quan