Bagaimanakah Python Mencapai Tingkah Laku Seperti Beban Terlebih Kaedah?

Linda Hamilton
Lepaskan: 2024-11-21 13:36:20
asal
645 orang telah melayarinya

How Does Python Achieve Method Overloading-like Behavior?

Metode Overloading dalam Python

Dalam Python, konsep kaedah terlebih muatan tidak disokong secara langsung kerana ia dalam bahasa seperti C . Walau bagaimanapun, terdapat teknik serupa yang dipanggil "penghantaran berbilang" yang membolehkan fungsi dihantar berdasarkan jenis hujahnya semasa masa jalan.

Pakej Penghantaran Berbilang dengan Pakej penghantaran berbilang

Pakej penghantaran berbilang dalam Python menyediakan cara untuk melaksanakan pelbagai fungsi penghantaran. Ia membenarkan fungsi didaftarkan dengan jenis argumen tertentu, membolehkan pemilihan dinamiknya pada masa jalan.

Penyelesaian

Menggunakan pakej multipledispatch, anda boleh mentakrifkan berbilang fungsi dengan nama yang sama, menyatakan argumen yang berbeza kombinasi taip:

from multipledispatch import dispatch
from collections import namedtuple
from types import LambdaType

Sprite = namedtuple('Sprite', ['name'])
Point = namedtuple('Point', ['x', 'y'])
Curve = namedtuple('Curve', ['x', 'y', 'z'])
Vector = namedtuple('Vector', ['x','y','z'])

@dispatch(Sprite, Point, Vector, int)
def add_bullet(sprite, start, direction, speed):
    print("Called Version 1")

@dispatch(Sprite, Point, Point, int, float)
def add_bullet(sprite, start, headto, speed, acceleration):
    print("Called version 2")

@dispatch(Sprite, LambdaType)
def add_bullet(sprite, script):
    print("Called version 3")

@dispatch(Sprite, Curve, int)
def add_bullet(sprite, curve, speed):
    print("Called version 4")
Salin selepas log masuk

Penggunaan

Untuk menggunakan fungsi berdaftar, hanya panggil fungsi yang diingini dengan jenis hujah yang sesuai:

sprite = Sprite('Turtle')
start = Point(1,2)
direction = Vector(1,1,1)
speed = 100 #km/h
acceleration = 5.0 #m/s**2
script = lambda sprite: sprite.x * 2
curve = Curve(3, 1, 4)
headto = Point(100, 100) # somewhere far away

add_bullet(sprite, start, direction, speed)
add_bullet(sprite, start, headto, speed, acceleration)
add_bullet(sprite, script)
add_bullet(sprite, curve, speed)
Salin selepas log masuk

Pendekatan ini memberikan fleksibiliti dalam mencipta fungsi dengan kombinasi hujah yang berbeza sambil mengelakkan kelemahan lebihan beban dalam Python.

Atas ialah kandungan terperinci Bagaimanakah Python Mencapai Tingkah Laku Seperti Beban Terlebih Kaedah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan