Java ndiwo mutauro wekutanga wandakadzidza mubasa rangu. Chimiro chayo chine hwaro mumakore angu ekutanga ekunzwisisa mazano ehurongwa. Mushure mokupfuura nemimwe mitauro yakati wandei ine nzira dzakasiyana kwazvo, ndawedzera maonero angu. Nhasi ndoda kumbozeya nyaya yenhaka .
MuJava, iyo pfungwa yenhaka yakanyatsobatanidzwa nepfungwa ye subtyping . Subtyping ndiko kuita kwehukama hweIS A. Semuenzaniso, kirasi Rabbit
imhando yemhando Mammal
. Kubva zvino, muenzaniso Rabbit
une maitiro ese Mammal
: inogara nhaka maitiro.
Nekuda kweizvi, unogona kupfuudza muenzaniso Rabbit
apo nzira inodaidzira Mammal
parameter kana kudzosa muenzaniso Rabbit
kana nzira yekudzoka iri Mammal
. Kana iwe wakadzidza Java, .Net, kana chimwe chinhu chiri kure chakafanana, ndiwo maonero aunoona nhaka, uye inova itsva yemazuva ose.
Inhaka yakajeka .
class Animal { void feed(); } class Rabbit extends Animal { //1 }
Rabbit
IS A
Animal
inogona feed()
Pandakatanga kutarisa Go, ndakashamisika kuti haina subtyping ichiri kupa nhaka. Go inoshandisa dhadha kutaipa:
Kana ichiita sedhadha, inotuhwina sedhadha, uye quacks sedhadha, zvino pamwe ndizvo.
Kana Go struct
ichishandisa mabasa akafanana senge interface, inoisa zvachose iyo interface.
type Animal interface { feed() //1 } type Rabbit struct { } func (rabbit Rabbit) feed() { //2 // feeds }
Animal
inogona kudyafeed()
basa riripo rinotora Rabbit
separameter, Rabbit
inoshandisa Animal
Ini handifarire Enda nekuda kwekukanganisa-kubata maitiro, asi ini ndaive nepfungwa mbiri pamusoro pekuita zvizere. Kune rumwe rutivi, ndakanzwisisa kuti yakanga iri pfungwa itsva, uye ndakaedza kuramba ndakazaruka mundangariro; nerumwe rutivi, ndinofunga kuti zvinhu zvinogara zviri nani pachena pane kujeka, kungave mukuvandudza software kana hupenyu chaihwo.
Python ndiwo mutauro unonakidza wandinoziva maererano nenhaka.
Subtyping uye mhando-yakavakirwa nhaka yave iripo muPython kubva payakavambwa.
class Animal: def feed(self): #1 pass #2 class Rabbit(Animal): #3 pass
Animal
inogona kudyaRabbit
IS A
Animal
inogona feed()
Panyaya iyi, Python inoshanda zvakafanana neJava maererano nenhaka. Python inopawo duck typing, iyo yandakatsanangura semashiripiti nzira . Semuyenzaniso, kuita chimwe chinhu chinogoneka , semuenzaniso , chinogona kudzosa iterator , unongoda kuita __iter__()
uye __next__()
:
class SingleValueIterable(): done = False def __init__(self, value): self.value = value def __iter__(self): #1 return self def __next__(self): #1 if self.done: raise StopIteration else: self.done = True return self.value svi = SingleValueIterable(5) sviter = iter(svi) #2 for x in sviter: print(x) #3
Iterator
- Pythons inoziva sei kubva patakaita nzira dziri pamusoro5
Dambudziko neiyi dhadha yekunyora nzira nderekuti inoshanda chete kune yePython yakafanotsanangurwa yemashiripiti nzira. Zvakadini kana iwe uchida kupa kirasi iyo yechitatu bato inogona kutora kubva mairi zvisina?
class Animal: def feed(): pass class Rabbit: def feed(): pass
Muchidimbu chiri pamusoro apa, Rabbit
haisi Animal
, zvinotirwadza. Pinda PEP 544 , yakanzi Protocols: Structural subtyping (static duck typing). Iyo PEP inogadzirisa kusagoneka kwekutsanangura nzira dzemashiripiti kumakirasi edu. Inotsanangura kirasi Protocol
yakapfava: kana uchinge wagara nhaka kubva mairi, nzira dzinotsanangurwa mukirasi dzinove dzakakodzera kutaipa dhadha, nokudaro zita - static duck typing.
from typing import Protocol class Animal(Protocol): #1 def feed(): #2 pass class Rabbit: def feed(): #2 pass class VenusFlytrap: def feed(): #2 pass
Protocol
Animal
Protocol
, chero kirasi inotsanangura feed()
inova Animal
, zvirinani kana kuipaHurongwa hunonangana nechinhu, nhaka, uye kunyora zvishoma zvinogona kunge zvine zvazvinoreva zvisingaturikire mune mimwe mitauro, zvichienderana nemutauro wekutanga waunodzidza. Java inozviita semutauro wakatarisana neChinhu uye inopa iyo yakazara package. Enda hausi mutauro weOO, asi uchiri kupa subtyping kuburikidza nedhadha kutaipa. Python inopa zvese zviri pachena uye zvakadzika nhaka asi pasina mainterface.
Iwe unodzidza mutauro mutsva wechirongwa nekuuenzanisa ne(s) waunotoziva. Kuziva mashandisirwo emutauro ndicho chinhu chakakosha pakunyora kodhi yeidiomatic mumutauro wauri kuda. Zvijairirane nezvinhu zvisipo mumitauro yako inozivikanwa: ivo vanozowedzera kunzwisisa kwako kwehurongwa hwakazara.
Enda kumberi:
Yakabudiswa paA Java Geek muna Ndira 26, 2025