Hướng dẫn how do you call an instance method in python? - làm thế nào để bạn gọi một phương thức cá thể trong python?

Trong hướng dẫn này, tôi sẽ giúp làm sáng tỏ những gì đằng sau các phương thức lớp, phương pháp tĩnh và phương pháp thể hiện thông thường.

Nếu bạn phát triển sự hiểu biết trực quan về sự khác biệt của họ, bạn sẽ có thể viết Python hướng đối tượng để truyền đạt ý định của nó rõ ràng hơn và sẽ dễ dàng duy trì hơn trong thời gian dài.

Ví dụ, lớp và phương thức tĩnh - tổng quan

Hãy bắt đầu bằng cách viết một lớp (Python 3) chứa các ví dụ đơn giản cho cả ba loại phương thức:

class MyClass:
    def method(self):
        return 'instance method called', self

    @classmethod
    def classmethod(cls):
        return 'class method called', cls

    @staticmethod
    def staticmethod():
        return 'static method called'

Lưu ý: Đối với người dùng Python 2: Các nhà trang trí

>>> obj = MyClass()
>>> obj.method()
('instance method called', )
4 và
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
5 có sẵn như Python 2.4 và ví dụ này sẽ hoạt động như hiện tại. Thay vì sử dụng tuyên bố đơn giản
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
6, bạn có thể chọn khai báo một lớp mới kế thừa từ
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
7 với cú pháp
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
8. Ngoài ra, bạn rất tốt để đi.
For Python 2 users: The
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
4 and
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
5 decorators are available as of Python 2.4 and this example will work as is. Instead of using a plain
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
6 declaration you might choose to declare a new-style class inheriting from
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
7 with the
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
8 syntax. Other than that you’re good to go.

Phương pháp thể hiện

Phương pháp đầu tiên trên

>>> obj = MyClass()
>>> obj.method()
('instance method called', )
9, được gọi là
>>> MyClass.method(obj)
('instance method called', )
0, là một phương thức thể hiện thông thường. Đó là loại phương pháp cơ bản, không rườm rà mà bạn sẽ sử dụng hầu hết thời gian. Bạn có thể thấy phương thức lấy một tham số,
>>> MyClass.method(obj)
('instance method called', )
1, chỉ ra một thể hiện là
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
9 khi phương thức được gọi (nhưng tất nhiên các phương thức thể hiện có thể chấp nhận nhiều hơn chỉ một tham số).

Thông qua tham số

>>> MyClass.method(obj)
('instance method called', )
1, các phương thức thể hiện có thể tự do truy cập các thuộc tính và các phương thức khác trên cùng một đối tượng. Điều này mang lại cho họ rất nhiều sức mạnh khi sửa đổi trạng thái đối tượng.

Họ không chỉ có thể sửa đổi trạng thái đối tượng, các phương thức thể hiện cũng có thể truy cập vào chính lớp thông qua thuộc tính

>>> MyClass.method(obj)
('instance method called', )
4. Điều này có nghĩa là các phương thức thể hiện cũng có thể sửa đổi trạng thái lớp.

Phương pháp lớp

Hãy để so sánh điều đó với phương pháp thứ hai,

>>> MyClass.method(obj)
('instance method called', )
5. Tôi đã đánh dấu phương pháp này với một bộ trang trí
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
5 để gắn cờ nó như một phương pháp lớp.

Thay vì chấp nhận tham số

>>> MyClass.method(obj)
('instance method called', )
1, các phương thức lớp lấy tham số
>>> MyClass.method(obj)
('instance method called', )
8 trỏ đến lớp, và không phải là thể hiện đối tượng khi phương thức được gọi.

Vì phương thức lớp chỉ có quyền truy cập vào đối số

>>> MyClass.method(obj)
('instance method called', )
8 này, nên nó có thể sửa đổi trạng thái thể hiện đối tượng. Điều đó sẽ yêu cầu truy cập vào
>>> MyClass.method(obj)
('instance method called', )
1. Tuy nhiên, các phương thức lớp vẫn có thể sửa đổi trạng thái lớp áp dụng trên tất cả các trường hợp của lớp.

Phương pháp tĩnh

Phương pháp thứ ba,

>>> obj.classmethod()
('class method called', )
1 được đánh dấu bằng một bộ trang trí
>>> obj = MyClass()
>>> obj.method()
('instance method called', )
4 để gắn cờ nó như một phương pháp tĩnh.

Loại phương thức này không lấy tham số

>>> MyClass.method(obj)
('instance method called', )
1 hay
>>> MyClass.method(obj)
('instance method called', )
8 (nhưng tất nhiên là nó tự do chấp nhận một số lượng tùy ý các tham số khác).

Do đó, một phương pháp tĩnh không thể sửa đổi trạng thái đối tượng cũng như trạng thái lớp. Các phương thức tĩnh bị hạn chế trong những dữ liệu mà họ có thể truy cập - và chúng chủ yếu là một cách để đặt tên cho các phương thức của bạn.

Hãy cùng xem họ trong hành động!

Tôi biết cuộc thảo luận này đã được lý thuyết khá cho đến thời điểm này. Và tôi tin rằng điều quan trọng là bạn phát triển sự hiểu biết trực quan về cách các loại phương pháp này khác nhau trong thực tế. Bây giờ chúng tôi sẽ đi qua một số ví dụ cụ thể.

Hãy cùng xem cách các phương pháp này hoạt động như thế nào khi chúng ta gọi chúng. Chúng tôi sẽ bắt đầu bằng cách tạo một thể hiện của lớp và sau đó gọi ba phương thức khác nhau trên đó.

>>> obj = MyClass()
>>> obj.method()
('instance method called', )
9 được thiết lập theo cách mà mỗi phương thức triển khai trả về một bộ chứa thông tin để chúng tôi theo dõi những gì mà diễn ra - và phần nào của lớp hoặc đối tượng mà phương thức có thể truy cập.

Ở đây, những gì xảy ra khi chúng ta gọi một phương thức thể hiện:instance method:

>>>

>>> obj = MyClass()
>>> obj.method()
('instance method called', )

Điều này xác nhận rằng

>>> MyClass.method(obj)
('instance method called', )
0 (phương thức thể hiện) có quyền truy cập vào thể hiện đối tượng (được in là
>>> obj.classmethod()
('class method called', )
7) thông qua đối số
>>> MyClass.method(obj)
('instance method called', )
1.

Khi phương thức được gọi, Python thay thế đối số

>>> MyClass.method(obj)
('instance method called', )
1 bằng đối tượng phiên bản,
>>> obj.staticmethod()
'static method called'
0. Chúng ta có thể bỏ qua đường cú pháp của cú pháp gọi chấm (
>>> obj.staticmethod()
'static method called'
1) và truyền đối tượng thể hiện theo cách thủ công để có được kết quả tương tự:

>>>

>>> MyClass.method(obj)
('instance method called', )

Điều này xác nhận rằng

>>> MyClass.method(obj)
('instance method called', )
0 (phương thức thể hiện) có quyền truy cập vào thể hiện đối tượng (được in là
>>> obj.classmethod()
('class method called', )
7) thông qua đối số
>>> MyClass.method(obj)
('instance method called', )
1.

Khi phương thức được gọi, Python thay thế đối số

>>> MyClass.method(obj)
('instance method called', )
1 bằng đối tượng phiên bản,
>>> obj.staticmethod()
'static method called'
0. Chúng ta có thể bỏ qua đường cú pháp của cú pháp gọi chấm (
>>> obj.staticmethod()
'static method called'
1) và truyền đối tượng thể hiện theo cách thủ công để có được kết quả tương tự:

Bạn có thể đoán điều gì sẽ xảy ra nếu bạn cố gắng gọi phương thức mà không tạo ra một thể hiện trước không?class method next:

>>>

>>> obj.classmethod()
('class method called', )

Điều này xác nhận rằng

>>> MyClass.method(obj)
('instance method called', )
0 (phương thức thể hiện) có quyền truy cập vào thể hiện đối tượng (được in là
>>> obj.classmethod()
('class method called', )
7) thông qua đối số
>>> MyClass.method(obj)
('instance method called', )
1.

Khi phương thức được gọi, Python thay thế đối số

>>> MyClass.method(obj)
('instance method called', )
1 bằng đối tượng phiên bản,
>>> obj.staticmethod()
'static method called'
0. Chúng ta có thể bỏ qua đường cú pháp của cú pháp gọi chấm (
>>> obj.staticmethod()
'static method called'
1) và truyền đối tượng thể hiện theo cách thủ công để có được kết quả tương tự:

Bạn có thể đoán điều gì sẽ xảy ra nếu bạn cố gắng gọi phương thức mà không tạo ra một thể hiện trước không?

Thời gian để gọi phương thức tĩnh ngay bây giờ:static method now:

>>>

>>> obj.staticmethod()
'static method called'

Bạn có thấy cách chúng tôi gọi

>>> MyClass.classmethod()
('class method called', )

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
2 trên đối tượng và có thể làm như vậy thành công không? Một số nhà phát triển ngạc nhiên khi họ biết rằng nó có thể gọi một phương thức tĩnh trên một thể hiện đối tượng.

Đằng sau hậu trường, Python chỉ đơn giản thực thi các hạn chế truy cập bằng cách không truyền trong đối số

>>> MyClass.method(obj)
('instance method called', )
1 hoặc
>>> MyClass.method(obj)
('instance method called', )
8 khi một phương thức tĩnh được gọi bằng cú pháp DOT.

Điều này xác nhận rằng các phương thức tĩnh không thể truy cập trạng thái thể hiện đối tượng cũng như trạng thái lớp. Chúng hoạt động như các chức năng thông thường nhưng thuộc về lớp học (và mọi trường hợp) không gian tên.

Bây giờ, hãy để Lừa xem xét những gì xảy ra khi chúng ta cố gắng gọi các phương thức này trên chính lớp - mà không tạo ra một thể hiện đối tượng trước:

>>>

>>> MyClass.classmethod()
('class method called', )

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)

Bạn có thấy cách chúng tôi gọi

>>> MyClass.classmethod()
('class method called', )

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
2 trên đối tượng và có thể làm như vậy thành công không? Một số nhà phát triển ngạc nhiên khi họ biết rằng nó có thể gọi một phương thức tĩnh trên một thể hiện đối tượng.

Đằng sau hậu trường, Python chỉ đơn giản thực thi các hạn chế truy cập bằng cách không truyền trong đối số

>>> MyClass.method(obj)
('instance method called', )
1 hoặc
>>> MyClass.method(obj)
('instance method called', )
8 khi một phương thức tĩnh được gọi bằng cú pháp DOT.

Điều này xác nhận rằng các phương thức tĩnh không thể truy cập trạng thái thể hiện đối tượng cũng như trạng thái lớp. Chúng hoạt động như các chức năng thông thường nhưng thuộc về lớp học (và mọi trường hợp) không gian tên.

Bây giờ, hãy để Lừa xem xét những gì xảy ra khi chúng ta cố gắng gọi các phương thức này trên chính lớp - mà không tạo ra một thể hiện đối tượng trước:

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'

>>>

>>> Pizza(['cheese', 'tomatoes'])
Pizza(['cheese', 'tomatoes'])

Bạn có thấy cách chúng tôi gọi

>>> MyClass.classmethod()
('class method called', )

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
2 trên đối tượng và có thể làm như vậy thành công không? Một số nhà phát triển ngạc nhiên khi họ biết rằng nó có thể gọi một phương thức tĩnh trên một thể hiện đối tượng. This code example and the ones further along in the tutorial use Python 3.6 f-strings to construct the string returned by
class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
1. On Python 2 and versions of Python 3 before 3.6 you’d use a different string formatting expression, for example:

def __repr__(self):
    return 'Pizza(%r)' % self.ingredients

Đằng sau hậu trường, Python chỉ đơn giản thực thi các hạn chế truy cập bằng cách không truyền trong đối số >>> MyClass.method(obj) ('instance method called', ) 1 hoặc >>> MyClass.method(obj) ('instance method called', ) 8 khi một phương thức tĩnh được gọi bằng cú pháp DOT.

Điều này xác nhận rằng các phương thức tĩnh không thể truy cập trạng thái thể hiện đối tượng cũng như trạng thái lớp. Chúng hoạt động như các chức năng thông thường nhưng thuộc về lớp học (và mọi trường hợp) không gian tên.

Pizza(['mozzarella', 'tomatoes'])
Pizza(['mozzarella', 'tomatoes', 'ham', 'mushrooms'])
Pizza(['mozzarella'] * 4)

Bây giờ, hãy để Lừa xem xét những gì xảy ra khi chúng ta cố gắng gọi các phương thức này trên chính lớp - mà không tạo ra một thể hiện đối tượng trước:

Chúng tôi đã có thể gọi

>>> obj.staticmethod()
'static method called'
3 và
>>> MyClass.classmethod()
('class method called', )

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
2 chỉ tốt, nhưng cố gắng gọi phương thức thể hiện
>>> MyClass.classmethod()
('class method called', )

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
7 không thành công với
>>> MyClass.classmethod()
('class method called', )

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
8.

>>> obj = MyClass()
>>> obj.method()
('instance method called', )
0

Và điều này được mong đợi - lần này chúng tôi đã tạo ra một thể hiện đối tượng và đã thử gọi một hàm thể hiện trực tiếp trên bản thiết kế lớp. Điều này có nghĩa là không có cách nào để Python đưa ra đối số

>>> MyClass.method(obj)
('instance method called', )
1 và do đó cuộc gọi không thành công.

Điều này sẽ làm cho sự khác biệt giữa ba loại phương pháp này rõ ràng hơn một chút. Nhưng tôi sẽ không để nó ở đó. Trong hai phần tiếp theo, tôi sẽ xem qua hai ví dụ thực tế hơn một chút khi sử dụng các loại phương pháp đặc biệt này.

Tôi sẽ dựa trên các ví dụ của mình xung quanh lớp xương trần này

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
0:

>>>

>>> obj = MyClass()
>>> obj.method()
('instance method called', )
1

Lưu ý: Ví dụ về mã này và các ví dụ hơn nữa trong hướng dẫn sử dụng các chuỗi Python 3.6 F để xây dựng chuỗi được trả về bởi

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
1. Trên Python 2 và các phiên bản của Python 3 trước 3.6, bạn đã sử dụng một biểu thức định dạng chuỗi khác, ví dụ:

Nhà máy pizza ngon với

>>> obj = MyClass()
>>> obj.method()
('instance method called', )
5

Nếu bạn đã có bất kỳ tiếp xúc với pizza trong thế giới thực, bạn sẽ biết rằng có nhiều biến thể ngon miệng có sẵn:

Người Ý đã tìm ra phân loại pizza của họ từ nhiều thế kỷ trước, và vì vậy những loại pizza ngon này đều có tên riêng của họ. Chúng tôi làm rất tốt để tận dụng điều đó và cung cấp cho người dùng của lớp class Pizza: def __init__(self, ingredients): self.ingredients = ingredients def __repr__(self): return f'Pizza({self.ingredients!r})' 0 của chúng tôi giao diện tốt hơn để tạo các đối tượng pizza mà họ khao khát.

Một cách tốt đẹp và sạch sẽ để làm điều đó là bằng cách sử dụng các phương thức lớp làm chức năng của nhà máy cho các loại pizza khác nhau mà chúng ta có thể tạo ra:

Lưu ý cách tôi sử dụng đối số

>>> MyClass.method(obj)
('instance method called', )
8 trong các phương thức nhà máy
class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
5 và
class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
6 thay vì gọi trực tiếp vào hàm tạo
class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
0.

>>> obj = MyClass()
>>> obj.method()
('instance method called', )
2

Đây là một mẹo bạn có thể sử dụng để tuân theo nguyên tắc don Lặp lại (khô). Nếu chúng tôi quyết định đổi tên lớp này tại một số điểm, chúng tôi đã giành được, hãy nhớ cập nhật tên hàm tạo trong tất cả các chức năng của nhà máy ClassMethod.

Bây giờ, chúng ta có thể làm gì với các phương pháp nhà máy này? Hãy để thử chúng ra:

Như bạn có thể thấy, chúng ta có thể sử dụng các chức năng của nhà máy để tạo các đối tượng

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
0 mới được cấu hình theo cách chúng ta muốn. Tất cả đều sử dụng cùng một hàm tạo
class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
9 trong nội bộ và chỉ cần cung cấp một lối tắt để ghi nhớ tất cả các thành phần khác nhau.

Một cách khác để xem xét việc sử dụng các phương thức lớp này là chúng cho phép bạn xác định các hàm tạo thay thế cho các lớp của bạn.

>>>

>>> obj = MyClass()
>>> obj.method()
('instance method called', )
3

Python chỉ cho phép một phương thức

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
9 cho mỗi lớp. Sử dụng các phương thức lớp, nó có thể thêm nhiều hàm tạo thay thế khi cần thiết. Điều này có thể làm cho giao diện cho các lớp học của bạn tự ghi chép (ở một mức độ nhất định) và đơn giản hóa việc sử dụng của chúng.

Khi nào nên sử dụng các phương thức tĩnh

Trong ví dụ trên, nó rõ ràng rằng

>>> Pizza(['cheese', 'tomatoes'])
Pizza(['cheese', 'tomatoes'])
6 có thể sửa đổi lớp hoặc thể hiện lớp theo bất kỳ cách nào. (Chắc chắn, bạn luôn có thể làm việc xung quanh điều đó với một biến toàn cầu nhưng đó không phải là vấn đề ở đây.)

Bây giờ, tại sao điều đó lại hữu ích?

Việc gắn cờ một phương thức như một phương pháp tĩnh không chỉ là một gợi ý rằng một phương thức đã giành được sửa đổi lớp hoặc trạng thái thể hiện - hạn chế này cũng được thực thi bởi thời gian chạy Python.

Các kỹ thuật như thế cho phép bạn giao tiếp rõ ràng về các phần của kiến ​​trúc lớp của bạn để công việc phát triển mới được hướng dẫn một cách tự nhiên để xảy ra trong các ranh giới đã đặt ra này. Tất nhiên, nó sẽ đủ dễ dàng để thách thức những hạn chế này. Nhưng trong thực tế, họ thường giúp tránh các sửa đổi tình cờ đi ngược lại với thiết kế ban đầu.

Nói cách khác, sử dụng các phương thức tĩnh và phương pháp lớp là cách để truyền đạt ý định của nhà phát triển trong khi thực thi ý định đó đủ để tránh hầu hết các lỗi và lỗi của tâm trí sẽ phá vỡ thiết kế.

Áp dụng một cách tiết kiệm và khi nó có ý nghĩa, viết một số phương pháp của bạn theo cách có thể cung cấp lợi ích bảo trì và làm cho ít có khả năng các nhà phát triển khác sử dụng các lớp của bạn không chính xác.

Phương pháp tĩnh cũng có lợi ích khi viết mã kiểm tra.

Bởi vì phương pháp

>>> Pizza(['cheese', 'tomatoes'])
Pizza(['cheese', 'tomatoes'])
6 hoàn toàn độc lập với phần còn lại của lớp, nó dễ dàng hơn nhiều để kiểm tra.

Chúng tôi không phải lo lắng về việc thiết lập một thể hiện lớp hoàn chỉnh trước khi chúng tôi có thể kiểm tra phương thức trong một bài kiểm tra đơn vị. Chúng ta chỉ có thể bắn đi như chúng ta sẽ thử nghiệm một chức năng thông thường. Một lần nữa, điều này làm cho việc bảo trì trong tương lai dễ dàng hơn.

Key Takeaways

  • Các phương thức thể hiện cần một thể hiện lớp và có thể truy cập phiên bản thông qua
    >>> MyClass.method(obj)
    ('instance method called', )
    
    1.
  • Phương pháp lớp don don cần một thể hiện lớp. Họ có thể truy cập vào trường hợp (
    >>> MyClass.method(obj)
    ('instance method called', )
    
    1) nhưng họ có quyền truy cập vào lớp thông qua
    >>> MyClass.method(obj)
    ('instance method called', )
    
    8.
  • Các phương pháp tĩnh don lồng có quyền truy cập vào
    >>> MyClass.method(obj)
    ('instance method called', )
    
    8 hoặc
    >>> MyClass.method(obj)
    ('instance method called', )
    
    1. Chúng hoạt động như các chức năng thông thường nhưng thuộc về không gian tên lớp.
  • Phương pháp tĩnh và lớp giao tiếp và (ở một mức độ nhất định) thực thi ý định của nhà phát triển về thiết kế lớp. Điều này có thể có lợi ích bảo trì.

Làm thế nào để bạn gọi một phương thức thể hiện?

Có ba bước để tạo và gọi một phương thức thể hiện:..
Đối tượng của lớp: Khai báo một đối tượng của lớp của bạn trong phương thức chính hoặc từ bên ngoài lớp. ....
Định nghĩa phương thức: Viết tiêu đề và mã cơ thể của phương thức như dưới đây: ....
Phương thức gọi: Bất cứ khi nào bạn muốn sử dụng phương thức, hãy gọi ObjectName.methodName () ;.

Làm thế nào để bạn sử dụng một phương thức thể hiện trong Python?

Hàm python isInstance () hàm isInstance () trả về true nếu đối tượng được chỉ định thuộc loại được chỉ định, nếu không là sai.Nếu tham số loại là một tuple, hàm này sẽ trả về true nếu đối tượng là một trong các loại trong tuple.The isinstance() function returns True if the specified object is of the specified type, otherwise False . If the type parameter is a tuple, this function will return True if the object is one of the types in the tuple.

Làm thế nào để bạn gọi một phương thức thể hiện từ một lớp trong Python?

class.method (ví dụ, args ...) Khi chúng ta gọi phương thức, python tự động thay thế bản thân bằng đối tượng cá thể, a, và sau đó MSG được truyền qua cuộc gọi là 'Call Call'.Lưu ý rằng chúng tôi chuyển thể hiện một đối số của phương thức foo (). method(instance, args...) When we call the method, the Python automatically replace the self with the instance object, a, and then the msg gets the string passed at the call which is 'instance call'. Note that we pass the instance a as an argument of the foo() method.

Làm thế nào để bạn gọi một biến thể hiện trong Python?

Chúng ta có thể truy cập biến thể hiện bằng toán tử đối tượng và dấu chấm (.).Trong Python, để làm việc với một biến thể hiện và phương thức, chúng tôi sử dụng từ khóa tự.Chúng tôi sử dụng từ khóa tự làm tham số đầu tiên cho một phương thức.using the object and dot ( . ) operator. In Python, to work with an instance variable and method, we use the self keyword. We use the self keyword as the first parameter to a method.