Một đối tượng có thể được truyền dưới dạng đối số Python không?

Trong ví dụ có hai lớp Person và MyClass, đối tượng của lớp Person được truyền dưới dạng tham số cho phương thức của lớp MyClass

class MyClass():
  def my_method(self, obj):
    print('In my_method method of MyClass')
    print("Name:", obj.name)
    print("Age:", obj.age)
Trong MyClass có một phương thức my_method lấy thêm một đối số ngoài self.
 
from MyClass import MyClass
class Person:
  def __init__(self, name, age):
    print('init called')
    self.name = name
    self.age = age

  def display(self):
    print('in display')
    print("Name-", self.name)
    print("Age-", self.age)
    # object of class MyClass
    obj = MyClass()
    # passing person object to
    # method of MyClass (self = person here)
    obj.my_method(self)

person = Person('John', 40)
person.display()
Trong lớp Người, MyClass cũng được sử dụng để được nhập.
from MyClass import MyClass
Trong đối tượng phương thức display() của MyClass được tạo.
obj = MyClass()
Sau đó, phương thức my_method() của lớp MyClass được gọi và đối tượng của lớp Person được truyền dưới dạng tham số.
 # passing person object to
 # method of MyClass (self = person here)
 obj.my_method(self)
Khi thực hiện chương trình Python này, bạn nhận được kết quả như sau.
init called
in display
Name- John
Age- 40
In my_method method of MyClass
Name: John
Age: 40

Khuyến nghị cho việc học (Các khóa học của Udemy)

  1. Hoàn thành khóa học Python Bootcamp
  2. Khóa học Python hoàn chỉnh-Học Python bằng cách thực hiện
  3. Chương trình đào tạo dành cho nhà phát triển web đầy đủ Python và Django
  4. Python cho Khoa học dữ liệu và Học máy
  5. Khóa học lập trình Java Masterclass

Đó là tất cả cho chủ đề này Truyền đối tượng của lớp làm tham số trong Python. Nếu bạn có bất kỳ nghi ngờ hoặc bất kỳ đề xuất nào để thực hiện, vui lòng gửi bình luận. Thanks

Các đối tượng là các thể hiện của lớp trong python có các trường và phương thức tôi. e. , giá trị và các chức năng liên quan

Python cho phép các lập trình viên của nó truyền đối tượng vào phương thức. Và cũng trả về các đối tượng từ một phương thức. Đây là một chương trình để minh họa điều này,

Trong bài viết này, chúng ta sẽ tìm hiểu cách truyền một phương thức làm đối số trong Python. Chúng ta sẽ thảo luận về phương pháp khác nhau của việc chuyển các phương thức và hàm làm đối số bằng cách sử dụng mã tùy chỉnh

Trong Python, mọi thứ như đối tượng, biến, v.v. được coi là một đối tượng. Do đó, các chức năng/phương thức, cũng được coi là đối tượng. Trong bài viết này, chúng tôi sẽ dính vào các phương pháp. Một phương thức có thể nhận nhiều đối số, như đối tượng, biến (cùng hoặc khác loại dữ liệu) và thậm chí cả các phương thức khác vì phương thức python là đối tượng hạng nhất. Các phương thức là các đối tượng có thể gọi được để bạn có thể chuyển chúng, lưu trữ chúng và có thể làm bất cứ điều gì bạn muốn. Phương thức __call__ được liên kết với mọi phương thức và được gọi tự động khi bạn gọi phương thức có hoặc không có đối số. Bạn có thể nghĩ về một phương thức (hoặc hàm) như một biến có giá trị là đối tượng mã thực tế có thể gọi được. Cả hai phương thức do người dùng định nghĩa hoặc một phương thức tích hợp đều có thể được truyền dưới dạng đối số cho một phương thức khác trong python

Ghi chú

Trong bài viết này, chúng ta sẽ sử dụng các phương thức trong các ví dụ sau, nhưng lưu ý rằng mọi thứ bên dưới đều áp dụng giống hệt nhau cho các hàm (ngoại trừ không có tham số self). Các hàm và phương thức đều là các khối mã tiện ích, nhưng khi một hàm tiện ích được định nghĩa bên trong một lớp, nó được gọi là một phương thức. Đừng nhầm lẫn giữa phương thức và chức năng. Tất cả các hàm trong Python có thể được truyền dưới dạng đối số cho một hàm khác

Thí dụ. Phương thức lớp được truyền dưới dạng đối số

Các phương thức được truyền dưới dạng đối số giống như một biến. Trong ví dụ này, chúng ta định nghĩa một lớp và các đối tượng của nó. Chúng ta tạo một đối tượng để gọi các phương thức của lớp. Bây giờ, để gọi một phương thức hoặc hàm đã truyền, bạn chỉ cần sử dụng tên mà nó được liên kết giống như cách bạn sẽ sử dụng tên thông thường của phương thức (hoặc hàm)

Note: Nếu bạn muốn truyền một phương thức của một lớp làm đối số nhưng chưa có đối tượng mà bạn sẽ gọi nó, bạn có thể chỉ cần truyền đối tượng sau khi bạn có nó làm đối số đầu tiên (i. e. đối số "bản thân")

class my_class:
    def method1(self):
        return "Hello World"
    def method2(self, methodToRun):
        result = methodToRun()
        return result

obj = my_class()
#method1 is passed as an argument
print(obj.method2(obj.method1))


Chào thế giới

Thí dụ. Hàm bậc cao hơn được truyền dưới dạng đối số

Giống như các phương thức lớp được gọi bằng cách sử dụng các đối tượng lớp và được truyền dưới dạng đối số, một hàm chung do người dùng định nghĩa cũng có thể được truyền dưới dạng đối số cho hàm khác vì hàm là đối tượng. Các hàm có thể nhận một hàm khác làm đối số được gọi là hàm bậc cao. Trong ví dụ bên dưới, một hàm func1 được tạo để nhận một hàm làm đối số

def func2(text):
    return text.upper()

def func3(text):
    return text.lower()

def func1(func):
    # storing the function in a variable
    res = func("Hello World")
    print(res)

#funtion calls
func1(func2)
func1(func3)


CHÀO THẾ GIỚI
Chào thế giới

Thí dụ. Hàm bao bọc được truyền dưới dạng đối số

Trong Python, các hàm Wrapper hoặc trình trang trí bọc một hàm khác để mở rộng hành vi của hàm được bao bọc mà không sửa đổi vĩnh viễn nó. Trong Decorators, các hàm được truyền dưới dạng đối số cho một hàm khác và sau đó chúng được gọi bên trong hàm bao bọc

Ví dụ dưới đây định nghĩa một trình trang trí đơn giản hello_decorator. inner1 là một hàm Wrapper trong đó đối số được gọi. Hàm bên trong có thể truy cập các hàm cục bộ bên ngoài như trong trường hợp này là func(). func() được gọi bên trong hàm bao bọc

________số 8_______


Xin chào, đây là trước khi thực hiện chức năng
Đây là bên trong chức năng
Đây là sau khi thực hiện chức năng

Thí dụ. Lambda Được chuyển làm đối số cho map()

Ví dụ quan trọng nhất về truyền phương thức làm đối số là lambda. Bạn thường sử dụng map()lambda cùng nhau để thực hiện các thao tác danh sách khác nhau và nhiều thao tác khác trong python. Trong python, biểu thức lambda là một cú pháp đặc biệt để tạo một hàm ẩn danh. Khi bạn đánh giá một biểu thức lambda, đối tượng bạn nhận được được gọi là hàm lambda. Các hàm Lambda giống như các hàm Python thông thường, với một số lưu ý

Python triển khai hàm map() trong đó tham số đầu tiên là một hàm và tham số thứ hai có thể lặp lại. Trong ví dụ này, lệnh gọi hàm chuyển hàm sqr(x) làm đối số hàm bằng cách sử dụng phương thức bản đồ. Một cách khác để sử dụng phương thức map() là chuyển lambda làm đối số với iterable

def sqr(x):
    return x ** 2

list1 = [1, 3, 5, 7, 9]
list(map(sqr, list1))

#use lambda
print(list(map((lambda x: x**2), list1)))


[1, 9, 25, 49, 81]

Phần kết luận

Trong bài viết này, chúng ta đã học cách truyền một phương thức và hàm làm đối số cho một hàm khác. Mỗi ví dụ đều có phương pháp riêng. Biểu thức lambda làm đối số cho phương thức map() là ví dụ tốt nhất để hiểu bài viết này vì bạn đã sử dụng chúng cùng nhau nhiều lần. Hãy thử chuyển các hàm khác nhau làm đối số cho các hàm khác và quan sát hành vi

Một đối tượng có thể được truyền dưới dạng đối số không?

Để chuyển một đối tượng làm đối số, chúng ta viết tên đối tượng làm đối số trong khi gọi hàm giống như cách chúng ta thực hiện đối với các biến khác . cú pháp. tên_hàm(tên_đối_tượng); . Trong ví dụ này, có một lớp có biến số nguyên 'a' và hàm 'add' lấy một đối tượng làm đối số.

Truyền đối tượng làm đối số là gì?

Các đối tượng của một lớp có thể được truyền dưới dạng đối số cho các hàm thành viên cũng như các hàm không phải thành viên theo giá trị hoặc theo tham chiếu . Khi một đối tượng được truyền theo giá trị, một bản sao của đối tượng thực được tạo bên trong hàm. Bản sao này bị hủy khi chức năng kết thúc.

Các đối tượng được truyền trong Python như thế nào?

Python sử dụng một hệ thống, được gọi là “ Gọi theo tham chiếu đối tượng ” hoặc “Gọi theo chỉ định”. Trong trường hợp bạn truyền các đối số như số nguyên, chuỗi hoặc bộ cho một hàm, thì việc truyền giống như gọi theo giá trị vì bạn không thể thay đổi giá trị của các đối tượng bất biến được truyền cho hàm.