30/09/2018, 17:39

Hàm super trong Python dùng để làm gì?

e đọc 1 vài ví dụ python, thấy có cái hàm super hay xuất hiện trong class, có ai biết là hàm này để làm j vs dùng như nào ko ạ??

htl@PyMI.vn viết 19:40 ngày 30/09/2018

Theo mình hiểu thì hàm này để truy cập vào các hàm của base class. VD:

class Base(object):
    def __init__(self, property):
        self.property = property

class Child(Base):
    def __init__(self, childProperty)
        super(Child, self).__init__()
        self.childProperty = childProperty

Thì khi khởi tạo 1 instance của Child bạn sẽ truyền vào 2 biến:

childInstance = Child(property, childProperty)

Lưu ý là Base class phải inherit từ object thì các class khác mới inherit từ nó được. Mình xem video youtube của Trevor Payne thì thấy nói thế

Đại loại thế, mình cũng mới xem qua video nói về class trong python, chứ chưa code thực tế

Theo link này: Understanding Python super() with init() methods thì trong python 3 bạn chỉ cần viết: super().__init__() thay vì super(Child, self).__init__()

Quan viết 19:42 ngày 30/09/2018

Cho mình hỏi với. Mình có class Base và class Child có inherit từ Base class như ví dụ của bạn.
Tuy nhiên trong 2 class này có 2 method có tên giống nhau có tên sameName():
Làm sao để sau khi tạo instance từ Child class mình có thể gọi method sameName(): của Base class mà không cần phải khai báo super() trong Child class.

Câu hỏi của mình có thể diễn đạt lại như thế này: Trong Python, khi tạo object của Child class ta có thể gọi các method của Base class khi class Child inherit class Base. Nhưng nếu 2 class này có method trùng tên nhau thì làm thế nào object có thể gọi được class đó của Base mà không cần phải khai báo thêm trong Child class (lúc này có thể gọi method của Child như bình thường bằng object.meThod1())

Sorry vì mình newbie, có thể câu hỏi của mình hơi ngốc

Nap Fvn viết 19:49 ngày 30/09/2018

Làm sao để sau khi tạo instance từ Child class mình có thể gọi method sameName(): của Base class mà không cần phải khai báo super() trong Child class.

Làm sao để sau khi tạo instance từ Child class mình có thể gọi method sameName(): của Base class mà không cần phải khai báo super() trong Child class.

Thì trong Function Child(Base).
Tạo 1 name = Base.sameName()

thì không dùng Super nữa.
dùng thì Child.name thui bác

Bài liên quan
0