2011-11-28 16 views
6

Tôi hiện đang có một lớp được gọi là đa thức, Việc khởi trông như thế này:python lớp con

def __init__(self, *termpairs): 
    self.termdict = dict(termpairs) 

tôi là tạo ra một đa thức bằng cách làm cho các phím số mũ và các giá trị đi kèm là hệ số. Để tạo một thể hiện của lớp này, bạn nhập như sau:

d1 = Polynomial((5,1), (3,-4), (2,10)) 

mà làm cho một cuốn từ điển như vậy:

{2: 10, 3: -4, 5: 1} 

Bây giờ, tôi muốn tạo một lớp con của lớp đa thức được gọi là bậc. Tôi muốn gọi constructor lớp đa thức trong constructor lớp Quadratic, tuy nhiên im không khá chắc chắn làm thế nào để làm điều đó. Những gì tôi đã thử là:

class Quadratic(Polynomial): 
def __init__(self, quadratic, linear, constant): 
    Polynomial.__init__(self, quadratic[2], linear[1], constant[0]) 

nhưng tôi gặp lỗi, bất kỳ ai có bất kỳ mẹo nào? Tôi cảm thấy như tôi đang sử dụng các thông số không chính xác khi tôi gọi constructor lớp đa thức.

Trả lời

10

Bạn có thể muốn

class Quadratic(Polynomial): 
    def __init__(self, quadratic, linear, constant): 
     Polynomial.__init__(self, (2, quadratic), (1, linear), (0, constant)) 
+0

Cảm ơn bạn đã làm việc này, tôi chỉ đặt các số ở vị trí sai. – me45

15

Bạn cũng nên sử dụng super() thay vì sử dụng các nhà xây dựng trực tiếp.

class Quadratic(Polynomial): 
    def __init__(self, quadratic, linear, constant): 
     super(Quadratic, self).__init__(quadratic[2], linear[1], constant[0]) 
+0

Bạn có thể giải thích lý do tại sao điều đó tốt hơn không? – kelorek

+1

OK. Xem bài đăng này để biết thêm thông tin: http://stackoverflow.com/questions/576169/understanding-python-super-and-init-methods – kelorek