Fakafehoanaki 'o e Python Fa'ahinga Checker: Inference 'o e koniteina 'ata'ataa
Ngaahi fakamatala
Mewayz Team
Editorial Team
Ko e hā ʻoku maumauʻi ai ʻe he ngaahi koniteina ʻataʻatā ʻa e ngaahi sivi faʻahinga Python — Pea mo e meʻa te ke lava ʻo fai fekauʻaki mo iá
Kuo matu'otu'a lahi 'a e sisitemi taipe'i fakautuutu 'a e Python talu mei hono fakafe'iloaki 'e he PEP 484 'a e ngaahi fakahinohino 'o e fa'ahinga 'i he 2015. 'I he 'aho ni, 'Oku fakafalala 'a e kau developers 'e laui miliona ki he ngaahi sivi fa'ahinga static ke ma'u 'a e fanga ki'i manupuna kimu'a pea nau toki taa'i 'a e ngaohi. Ka 'oku 'i ai ha tuliki fakapulipuli, fakatupu lotomamahi 'o e sisitemi fa'ahinga 'oku kei trips hake na'a mo e kau 'enisinia taukei: ko e ha 'a e fa'ahinga 'oku ma'u 'e ha koniteina 'ata'ataa? Ko e taimi 'oku ke tohi ai 'a e x = [] 'o 'ikai ha fakamatala, kuo pau ke mate'i 'e ho'o sivi fa'ahinga — pea 'oku mate'i kehekehe 'a e kau sivi kehekehe. 'Oku fakatupu 'e he divergence ko 'eni 'a e ngaahi palopalema mo'oni ki he ngaahi timi 'oku nau tauhi 'a e ngaahi codebases lalahi, 'a ia 'e lava ke 'asi ai 'a e fetongi pe fakataha'i 'o e ngaahi sivi fa'ahinga 'o e ngaahi fehalaaki ta'e'amanekina 'e laungeau 'i he po.
'Oku veteki 'e he fakamatala ko 'eni 'a e founga 'oku tokanga'i ai 'e he ngaahi me'a lalahi 'e fa 'o e Python 'a e fa'ahinga — mypy, pyright, pytype, mo e pyre — 'a e inference 'o e koniteina 'ata'ataa, ko e ha 'oku nau ta'e lototaha ai, pea ko e ha 'a e ngaahi founga 'aonga te ke lava 'o ngaue'aki ke tohi 'a e fa'ahinga-malu 'o e Python tatau ai pe pe ko ho'o fili tooling.
Ko e Palopalema Tefito: Ko e Ngaahi Koniteina 'Oku 'Ikai ha Me'a 'Oku 'Ikai Mahino Fakanatula
Fakakaukau ki he laine ta'efakatupu maumau ko 'eni 'o e Python: ngaahi ola = []. Ko e ngaahi olá ko ha lisi[int]? Ko ha lisi[str]? Ko ha lisi[tuʻutuʻuni[str, Ha]]? Ka 'ikai ha toe context, 'oku 'ikai ha founga mo'oni ke 'ilo'i. 'Oku 'ikai ke tokanga 'a e taimi lele 'o e Python — 'oku heterogeneous 'a e ngaahi lisi 'i he natula — ka 'oku fie ma'u 'e he kau sivi 'o e fa'ahinga static ke vahevahe ha fa'ahinga sima ki he ngaahi kehekehe kotoa pe ke fai 'enau ngaue. 'Oku fakatupu 'e he me'a ni ha fepakipaki tefito 'i he vaha'a 'o e fe'unu'aki 'o e Python mo e ngaahi fakapapau 'oku feinga 'a e 'analaiso static ke 'omi.
'Oku fakatahataha'i 'a e palopalema mo e ngaahi tikisinale mo e ngaahi seti. Ko ha {} 'ata'ataa 'oku mo'oni 'a e parsed ko ha dict, 'ikai ko ha seti, 'a ia 'oku ne tanaki atu 'a e 'ikai mahino fakasintekisi 'i 'olunga 'i he 'ikai mahino 'o e levolo 'o e fa'ahinga. Pea ko e ngaahi koniteina nested — fakakaukau defaultdict(lisi) pe ngaahi ola = {k: [] ki he k 'i he ngaahi kī} — teke 'a e ngaahi misini inference ki honau ngaahi fakangatangata. Kuo fakatupulaki 'e he fa'ahinga takitaha 'o e sivi 'a 'ene heuristics, pea 'oku mahu'inga ange 'a e ngaahi faikehekehe 'i he tokolahi taha 'o e kau developers 'oku nau 'ilo'i.
'I he ngaahi sisitemi ngaohi'anga 'oku nau ngaue'aki 'a e ngaahi kavenga ngaue mo'oni — pe ko ha CRM 'oku ne tokanga'i 'a e ngaahi lekooti 'o e kasitomaa, ko ha module invoicing 'oku ne fakatupu 'a e ngaahi me'a laine, pe ko ha paipa 'analaiso 'oku ne fakatahataha'i 'a e ngaahi metrics — 'oku 'asi ma'u pe 'a e ngaahi koniteina 'ata'ataa ko e ngaahi founga 'o e initialization. Ko hono ma'u hala 'enau ngaahi fa'ahinga 'oku 'ikai ke ne fakatupu pe 'a e ngaahi fakatokanga linter; 'e lava ke ne fakapulipuli'i 'a e ngaahi bugs mo'oni 'oku nau 'alu holo 'o a'u ki he taimi lele.
Mypy: Fakatoloi Fakakaukau Mo e Fakakaukau Fakapulipuli
Mypy, ko e motu'a taha mo lahi taha hono 'ave 'o e Python type checker, 'oku ne to'o ha founga 'oku 'ikai fu'u lenient ki he ngaahi koniteina 'ata'ataa. 'I he taimi 'oku ne fetaulaki ai mo e x = [] 'i he 'atakai 'o e ngaue, 'oku ne feinga ke toloi 'a e tu'utu'uni 'o e fa'ahinga pea infer 'a e fa'ahinga 'o e 'elemeniti mei hono faka'aonga'i kimui ange. Kapau te ke tohi 'a e x = [] pea muimui 'i he x.append(42), 'e faka'uhinga'i 'e he mypy 'a e lisi[int]. Ko e founga ko 'eni "kau" 'oku ngaue faka'ohovale lelei ki he ngaahi keisi hangatonu 'a ia 'oku populated 'a e koniteina 'i loto 'i he 'atakai tatau.
Kaekehe, 'oku liliu lahi 'a e 'ulungaanga 'o e mypy 'o fakatatau ki he context mo e ngaahi tu'unga fefeka. 'I he module 'o e 'atakai (kouti 'o e tu'unga 'i 'olunga), pe 'i he taimi 'oku paasi ai 'a e koniteina ki ha ngaue kehe kimu'a pea toki populated, 'Oku fa'a to 'a e mypy ki mui ki he lisi[Ha]. 'I lalo 'i he fuka --fefeka, 'Oku fakatupu 'e he me'a ni ha fehalaaki, ka 'i he founga 'o e default 'oku fakalongolongo 'ene paasi. 'Oku 'uhinga 'eni 'e lava ke tanaki 'e he ngaahi timi 'oku nau lele mypy 'o 'ikai ha founga fefeka 'a e ngaahi koniteina implicitly-typed 'oku nau ngaue ko e ngaahi hatches hola mei he sisitemi fa'ahinga, 'o ikuna'i hono taumu'a.
Ko e taha 'o e ngaahi 'ulungaanga fakapulipuli tautautefito: mypy ngaahi liliu kimu'a 'i he 0.990 'e infer 'i he taimi 'e ni'ihi lisi[Ta'e'iloa] 'i loto pea toki fakalahi ki he lisi[Ha] 'i he ngaue. Post-0.990, na'e tightened 'a e inference, ka na'e maumau'i 'e he liliu ha tokolahi faka'ohovale 'o e codebases 'o e mamani mo'oni na'e fakafalala ki he 'ulungaanga fakangofua 'o 'ikai ke ne 'ilo'i ia. Ko ha kaveinga 'eni 'oku toutou hoko — 'oku kau 'a e ngaahi liliu ki he inference 'o e koniteina 'ata'ataa 'i he ngaahi fakafo'ou 'o e checker 'o e fa'ahinga fakamoveuveu lahi taha koe'uhi ko e ngaahi sipinga 'oku fu'u ubiquitous.
Pyright: Fakakaukau'i fefeka mo e Fa'ahinga "Ta'e'iloa"
Pyright, fakatupulaki 'e he Microsoft mo e fakaivia 'o e Pylance 'i he VS Code, 'oku ne to'o ha tu'unga fakafilosofia kehe 'aupito. Kae 'ikai ke to fakalongolongo ki mui ki he Ha, 'Oku fakafaikehekehe'i 'e he pyright 'a e Ta'e'iloa (ko ha fa'ahinga 'oku te'eki ke fakapapau'i) mo e Ha (ko ha opt-out mahino 'o e sivi'i 'o e fa'ahinga). Ko e taimi 'oku ke tohi ai 'a e x = [] 'i he founga fefeka 'o e pyright, 'oku ne faka'uhinga'i 'a e lisi[Ta'e'iloa] pea lipooti ha fakatotolo, 'o fakamālohi'i koe ke ke 'oatu ha fakamatala.
'Oku toe fakatupu 'ita ange 'a e Pyright fekau'aki mo efakapuliki 'i loto 'i he 'atakai. Kapau te ke tohi:
-
x = [] muimui atu 'i he x.append("malo") — 'oku faka'uhinga'i 'e he pyright 'a e lisi[str]
x = [] pea muimui atu 'i he x.fakapiki(1) pea x.fakapiki("malo") — 'oku faka'uhinga'i 'e he pyright 'a e lisi[int | mālohi
- x = [] paasi hangatonu ki ha ngaue 'oku 'amanaki ki he lisi[int] — 'oku faka'uhinga'i 'e he pyright 'a e lisi[int] mei he tu'unga 'o e ui-saiti
- x = [] fakafoki mai mei ha ngaue 'oku 'ikai ha fakamatala 'o e fa'ahinga fakafoki — 'oku lipooti 'e he pyright ha fehalaaki kae 'ikai ko e mate'i
Ko e inference bidirectional ko 'eni ('o faka'aonga'i 'a e fakatou'osi 'a e faka'aonga'i kimui ange mo e ngaahi fa'ahinga 'oku 'amanaki mei he ngaahi saiti ui) 'oku ne 'ai 'a e pyright 'oku 'iloa 'oku tonu ange ia 'i he mypy ki he ngaahi koniteina 'ata'ataa. Ko e tradeoff ko e verbosity: pyright 'a e founga fefeka 'o e ngaahi fuka fakafuofua ki he 30-40% lahi ange 'a e ngaahi me'a 'i ha codebase angamaheni 'oku 'ikai ke fakamatala'i 'i hono fakafehoanaki ki he founga fefeka 'o e mypy, 'o fakatatau ki he 'analaiso mei ha ngaahi lipooti 'o e hiki 'o e ma'u'anga fakamatala 'oku fakaava. Ki he ngaahi timi 'oku nau langa 'a e ngaahi sisitemi backend faingata'a — talamai, ko ha tu'unga 'oku ne pule'i 'a e 207 modules fehokotaki 'oku ne 'ufi'ufi 'a e CRM, totongi, mo e analytics — 'oku ma'u 'e he fefeka 'o e pyright 'a e ngaahi fefeka 'o e interface fakapulipuli 'e mole 'a e inference lenient.
Pytype mo e Pyre: Ko e Ngaahi Hala 'oku Si'isi'i ange 'a e Fononga
Ko e pytype 'a e Google mahalo 'oku ne to'o 'a e founga faka'aonga'i lahi taha. Kae 'ikai ke fie ma'u 'a e ngaahi fakamatala pe tō ki mui ki he Ha, 'Oku faka'aonga'i 'e he pytype 'a e 'analaiso 'o e polokalama kakato ke muimui'i 'a e founga 'oku faka'aonga'i ai ha koniteina 'i he ngaahi ngata'anga 'o e ngaue. Kapau te ke fa'u ha lisi 'ata'ataa 'i ha ngaue 'e taha pea paasi ia ki ha taha 'oku ne fakalahi 'a e ngaahi fika kakato, 'e lava ke fa'a infer 'e he pytype 'a e lisi[int] 'o 'ikai ha ngaahi fakamatala 'i he me'a kotoa pe. Ko e inference ko 'eni 'o e kolosi-ngaue 'oku fakamole lahi 'a e pytype — 'oku fu'u tuai ange 'a e pytype 'i he mypy pe pyright 'i he ngaahi codebases lalahi — ka 'oku ne fakatupu 'a e ngaahi fakakaukau loi 'oku si'isi'i ange 'i he code 'oku 'ikai ke fakamatala'i.
'Oku toe fakafe'iloaki 'e he Pytype 'a e fakakaukau 'o e "ngaahi fa'ahinga fakakonga" ki he ngaahi koniteina 'ata'ataa. Ko ha fo'ou na'e fa'u [] 'oku ne ma'u ha fa'ahinga konga 'oku fakalakalaka hono fakalelei'i 'i he fetaulaki 'a e checker mo hono faka'aonga'i lahi ange. 'Oku fakakaukau 'eni 'oku faka'ofo'ofa ka 'e lava ke ne fakatupu 'a e ngaahi fekau hala fakatupu puputu'u 'i he taimi 'oku 'ikai lava ke solova kakato ai 'a e fa'ahinga konga, hange ko e taimi 'oku tafe ai ha koniteina 'ata'ataa 'i ha ngaahi ngaue 'o 'ikai ha taimi 'oku populated.
💡 DID YOU KNOW?
Mewayz replaces 8+ business tools in one platform
CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.
Start Free →Ko e pyre 'a Meta, lolotonga ia, 'oku hews ofi ange ki he 'ulungaanga 'o e mypy ka 'oku 'i ai 'a e ngaahi defaults fefeka ange. 'Oku ngaue'aki 'e Pyre 'a e x = [] ko e lisi[ta'e'iloa] pea 'oku fie ma'u 'a e fakamatala 'i he lahi taha 'o e ngaahi tu'unga. Ko e feitu'u 'oku fakafaikehekehe'i ai 'e he pyre ia 'i he'ene tokanga'i 'o e ngaahi lea 'ata'ataa 'o e tikisinale 'oku faka'aonga'i ko e kwargs — ko ha sipinga angamaheni 'i he ngaahi fa'unga 'o e uepi. Pyre 'oku 'i ai 'a e logic makehe-keisi ke infer 'a e ngaahi fa'ahinga tikisinale mei he ngaahi tu'unga 'o e fakakikihi 'o e lea mahu'inga, fakasi'isi'i 'a e kavenga 'o e annotation 'i he codebases 'o e framework-mamafa. Koe'uhi ko e lahi taha 'o e ngaahi polokalama uepi fakaonopooni 'oku kau ai hono faka'aonga'i lahi 'o e unpacking 'o e tikisinale ki he configuration mo e tokanga'i 'o e kole, 'oku totongi 'e he pragmatism ko 'eni 'a e ngaahi vahenga.
Uesia 'o e Mamani Mo'oni: 'I he taimi 'oku u'u ai 'e he Inference Divergence
Ko e ngaahi faikehekehe 'i he vaha'a 'o e ngaahi sivi fa'ahinga 'e ngali fakaako kae 'oua kuo ke a'usia kinautolu 'i ha codebase 'o e ngaohi. Fakakaukau ki ha founga angamaheni 'i he ngaahi polokalama pisinisi: initializing ha fokotu'utu'u 'o e fakamatala 'oku ma'u 'e he populated conditionally.
Ko e ngaahi koniteina 'ata'ataa fakatu'utamaki taha 'oku 'ikai ko e ngaahi fa'ahinga 'o e kau sivi 'o e fuka — ko kinautolu 'oku nau fakalongolongo 'o paasi mo ha inferred Ha fa'ahinga fa'ahinga, 'o faka'ata 'a e fakamatala 'oku 'ikai ke fe'unga ke tanaki ta'e fakatokanga kae 'oua kuo 'i ai ha ngaue 'i lalo 'oku 'ikai lava ke 'i he taimi lele mo ha Type>s back is ke . tupuʻanga.
Ko ha fakatātā pau: naʻe lipooti ʻe ha timi ʻi ha kamataʻanga fintech ʻa hono fakamoleki ʻo e ʻaho ʻe tolu ʻi hono fakaleleiʻi ha ʻisiū ʻo e ngaohiʻanga koloa ʻa ia naʻe fakaʻuhingaʻi ai ha lisi ʻataʻatā, ʻoku ʻuluaki ʻi ha ngaue ʻo e ngaueʻaki ʻo e totongi, ko e lisi[Ha] ʻe he mypy. Na'e totonu ke 'i he lisi 'a e ngaahi me'a Tesimale ki he ngaahi lahi 'o e pa'anga, ka na'e fakapipiki 'e ha hala fakakouti 'a e ngaahi mahu'inga 'o e float 'i hono fetongi. Naʻe fakaʻatā fakalongolongo ia ʻe he fakakaukau anga-malū ʻa Mypy. Na'e toki 'asi mai 'a e bug 'i he taimi na'e fakatupu ai 'e he ngaahi fehalaaki 'o e rounding 'i he fika 'o e float ha faikehekehe 'o e $0.01 'i ha kulupu 'o e ngaahi inivoisi 'e 12,000. Kapau na'a nau ngaue'aki 'a e pyright 'i he founga fefeka, pe faka'ilonga'i pe 'a e lisi 'ata'ataa ko e lisi[Tesimale], na'e mei ma'u 'a e bug 'i he taimi fakalakalaka.
'I he Mewayz, 'a ia 'oku fakahoko ai 'e he peletifoomu 'a e invoicing, ngaahi fakafuofua 'o e totongi, mo e ngaahi 'analaiso fakapa'anga 'i he 138,000+ 'akauni 'o e kau faka'aonga'i, 'Oku 'ikai ko e fa'ahinga 'o e 'ava ko 'eni 'o e fa'ahinga-malu 'a e teolosia — ko e faikehekehe ia 'i he vaha'a 'o e lele totonu 'o e totongi mo e recalculations fakamole lahi. Ko e akonaki'i fefeka 'o e taipe 'o takatakai 'i he kamata'anga 'o e koniteina ko e taha ia 'o e ngaahi founga faka'enisinia "fakapikopiko" 'oku ne ta'ofi 'a e ngaahi me'a fakafiefia 'oku hoko 'i he ngaohi.
Ngaahi Founga Lelei Taha ki hono Kamata'i 'o e Koniteina Malu'i
Tatau ai pe pe ko e ha e fa'ahinga checker 'oku faka'aonga'i 'e ho'o timi, 'Oku 'i ai ha ngaahi founga pau ke fakangata 'a e ambiguity 'o e koniteina 'ata'ataa 'o faka'aufuli. Ko e taumu'a ke 'oua na'a teitei fakafalala ki he inference ki he ngaahi koniteina 'ata'ataa — 'ai ke mahino 'a e fa'ahinga koe'uhi ke lava 'o to'oto'o ho'o code 'i he ngaahi sivi kotoa pe pea malu mei he ngaahi liliu 'o e 'ulungaanga inference 'i he vaha'a 'o e ngaahi liliu.
- Faka'ilonga'i ma'u pe 'a e ngaahi kehekehe 'o e koniteina 'ata'ataa. Tohi'i 'a e ngaahi ola: lisi[int] = [] kae 'ikai ko e ngaahi ola = []. 'Oku si'isi'i 'a e fakamole verbosity 'i hono fakafehoanaki ki he taimi debugging 'oku fakahaofi. Ko e founga ngaue 'e taha ko 'eni 'oku ne fakangata 'a e fakafuofua ki he 80% 'o e ngaahi me'a 'o e inference 'o e koniteina 'ata'ataa.
- Ngaue'aki 'a e ngaahi ngaue 'o e fale ngaohi'anga koloa ki he ngaahi koniteina fihi. Ko e fakamatala 'o e fa'ahinga fakafoki 'oku ne 'ai 'a e fa'ahinga 'oku fakataumu'a ke ta'e-mahino mo fakatohi 'iate ia pe.
- Sai'ia ange 'i he ngaahi constructors kuo taipe'i 'i he ngaahi literals ki he ngaahi fa'ahinga 'oku 'ikai mahu'inga. Tohi'i 'a e ngaahi me'a: seti[int] = seti() kae 'ikai ko e fakafalala ki he fakakaukau 'o e mahino 'o e seti. Ki he defaultdict mo e Lau, 'oatu ma'u pe 'a e fa'ahinga fakangatangata: lau: Lau[str] = Lau().
- Fakalelei'i 'a e founga fefeka 'o ho'o type checker ki he code fo'ou. 'Oku fakatou poupou'i 'e he mypy mo e pyright 'a e faile pe fakahinohino 'o e fakahokohoko. Faka'ata 'a e vakai'i fefeka 'i he ngaahi modules fo'ou lolotonga 'oku hiki fakautuutu 'a e code tukufakaholo. 'Oku ta'ofi 'e he me'a ni 'a e tanaki 'o e ngaahi koniteina fo'ou 'oku faka'ilonga'i-taipe.
- Tānaki atu 'a e fakafehoanaki 'o e sivi 'o e fa'ahinga ki ho'o paipa CI. Ko hono lele'i 'o e mypy mo e pyright 'i ho'o codebase 'oku ne ma'u vave 'a e kehekehe 'o e inference. Kapau 'oku paasi ha sipinga 'i ha sivi 'e taha ka 'oku 'ikai ke lava 'a e taha, ko e faka'ilonga ia 'oku 'ikai ke mahino fe'unga 'a e fa'ahinga.
Ko e 'Ata Lahi Ange: Siaki 'o e Fa'ahinga ko ha Ngaue Fakatimi
Ko e inference 'o e koniteina 'ata'ataa 'oku iku ia ko ha microcosm 'o ha pole lahi ange 'i he sisitemi fa'ahinga 'o e Python: 'a e fepakipaki 'i he vaha'a 'o e fakafiemalie mo e malu. 'Oku ngaue faka'ofo'ofa 'a e filosofia 'a e Python 'o e "'oku tau fakangofua kotoa 'a e kakai lalahi" ki he prototyping mo e ngaahi tohi, ka 'oku fie ma'u 'e he ngaahi sisitemi ngaohi 'oku nau tauhi 'a e kau faka'aonga'i 'e lauiafe ha ngaahi fakapapau'i malohi ange. Ko e mo'oni 'oku 'ikai ke lototaha 'a e kau sivi fa'ahinga lalahi 'e toko fa ki ha me'a 'oku tefito 'o hange ko e fa'ahinga 'o e [] 'oku ne fakamamafa'i 'oku kei matu'otu'a 'a e 'ekosisitemi taipe 'a e Python.
Ki he ngaahi timi 'enisinia langa 'a e ngaahi tu'unga faingata'a — pe 'oku ke pule'i ha nima 'o e microservices pe ko ha sisitemi fakatahataha'i mo e ngaahi modules fehokotaki 'e laungeau hange ko e pisinisi 'a e Mewayz OS — 'oku hangatonu 'a e fale'i 'aonga: 'oua 'e fakafalala ki he inference ki he ngaahi koniteina 'ata'ataa mo e configureno it, fili ha fa'ahinga treckerat mo e . ngaahi tohi 'oku hoko 'oku lava ke fakamo'oni'i 'e he misini. Ko e miniti ʻe nima ʻoku fakamoleki ʻi hono tohi ʻo e lisi[ʻInivoisi] kae ʻikai ko e [] te ne fakahaofi koe ʻi ha ngaahi houa ʻo e fakatonutonu ʻi he taimi ʻoku fakafuofuaʻi ai hoʻo codebase.
'I he PEP 696 (ngaahi fakangatangata 'o e fa'ahinga 'o e default) mo e PEP 695 (fa'ahinga 'o e syntax 'o e fakangatangata) ke tu'uta 'i he ngaahi liliu fo'ou ange 'o e Python, 'e kei fakalakalaka 'a e ergonomics 'o e taipe'i mahino. 'E fakapuliki 'a e 'ava 'i he vaha'a 'o e "faka'ilonga'i" mo e "ta'efaka'ilonga'i" Python. Ka 'o a'u ki he 'aho ko ia, 'Oku kei hoko pe 'a e ngaahi fa'ahinga koniteina mahino ko e taha 'o e ngaahi founga ngaue ma'olunga taha-ROI 'i he toolkit 'a e developer 'o e Python — ko ha ki'i ako 'oku ne totongi 'a e tupu fakatahataha 'i he module kotoa pe, sprint kotoa pe, mo e deployment kotoa pe 'o e ngaohi'anga koloa.
Ngaahi Fehuʻi ʻoku Faʻa ʻEke
Ko e hā ʻoku ʻikai lava ai ʻe he kau sivi taipe ʻo lototaha ki he faʻahinga ʻo ha lisi ʻataʻatā?
Ka ke tohi `x = []`, kuo pau ke infer 'e he tokotaha sivi fa'ahinga ha fa'ahinga 'o 'ikai ha ngaahi fakahinohino mahino. 'Oku faka'aonga'i 'e he kau sivi kehekehe 'a e ngaahi founga kehekehe: 'oku infer 'e he ni'ihi 'a e `list[Any]` (ko ha lisi 'o ha me'a pe), lolotonga ia 'e lava ke infer 'e he ni'ihi ha fa'ahinga pau ange ka 'oku hala hange ko e `list[None]`. Ko e ‘ikai ha tu‘unga fakamāmani lahi ko ení ko e ‘uhinga ia ‘oku nau ta‘efelotoi aí. Ki he ngaahi poloseki 'oku nau faka'aonga'i 'a e ngaahi sivi lahi, 'e lava ke hoko 'a e ta'efe'unga ko 'eni ko ha mamahi 'ulu lahi, motuhi 'a e 'analaiso 'i he me'angaue 'e taha 'oku paasi 'i he taha.
Ko e hā ʻa e founga faingofua taha ke fakaleleiʻi ʻaki ʻa e ngaahi fehalaaki ʻi he koniteina ʻataʻatā?
Ko e fakalelei'anga hangatonu taha ko hono 'oatu ha fakamatala mahino 'o e fa'ahinga. Kae 'ikai ko e `eku_lisi = []`, tohi `eku_lisi: lisi[str] = []` ke fakaha mahino 'a e fa'ahinga 'oku fakataumu'a ki ai. 'Oku to'o 'e he me'a ni 'a e ambiguity kotoa pe ki he checker 'o e fa'ahinga, fakapapau'i 'a e 'ulungaanga tu'uma'u 'i he ngaahi me'angaue kehekehe hange ko e mypy, Pyright, mo e Pyre. 'Oku fokotu'u atu 'a e founga ko 'eni ki he ngaahi kamata'anga 'o e koniteina 'ata'ataa kotoa pe ke ta'ofi 'a e ngaahi fehalaaki 'o e inference.
'E anga fefe ha'aku tokanga'i 'a e ngaahi koniteina 'ata'ataa 'i loto 'i he ngaahi faka'uhinga 'o e kalasi?
Ko e me'a angamaheni 'eni he 'oku fie ma'u 'e he ngaahi fakamatala 'i loto 'i he ngaahi kalasi ha tokanga'i makehe. Kuo pau ke ke faka'aonga'i 'a e `mei he __kaha'u__ 'omi 'a e ngaahi fakamatala` 'omi pe ko ha fakamatala `ClassVar` kapau 'oku fakataumu'a 'a e lisi ke hoko ko ha 'ulungaanga 'o e kalasi. Hange ko 'eni, `kalasi 'ekuKalasi: 'eku_lisi: KalasiVar[lisi[str]] = []`. Ka 'ikai 'eni, 'e faingata'a'ia 'a e tokotaha sivi fa'ahinga ke faka'uhinga'i totonu 'a e fa'ahinga, 'o iku ai ki he ngaahi fehalaaki.
'Oku 'i ai ha ngaahi me'angaue ke tokoni ki hono pule'i 'o e ngaahi me'a ko 'eni 'o e taipe 'i he ngaahi poloseki lalahi?
'Io, 'Oku tautautefito ki he lelei 'a e ngaahi sivi fa'ahinga fakalakalaka hange ko e Pyright ('a ia 'oku ne fakaivia 'a e Pylance 'i he VS Code) 'i hono tokanga'i 'o e inference faingata'a. Ki he codebases lalahi, ngaahi tu'unga hange ko e Mewayz ('oatu 'a e 207 modules 'analaiso ki he $19/mahina) 'e lava ke ne 'omi 'a e loloto ange, sivi'i 'o e fa'ahinga tu'uma'u ange mo tokoni ke fakamālohi'i 'a e ngaahi founga 'o e annotation 'i he kotoa 'o ho'o timi, mitigating 'a e ngaahi ta'efe'unga 'oku alea'i 'i he fakamatala.
Try Mewayz Free
All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.
Get more articles like this
Weekly business tips and product updates. Free forever.
You're subscribed!
Start managing your business smarter today
Join 30,000+ businesses. Free forever plan · No credit card required.
Ready to put this into practice?
Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.
Start Free Trial →Related articles
Hacker News
How I write software with LLMs
Mar 16, 2026
Hacker News
The Linux Programming Interface as a university course text
Mar 15, 2026
Hacker News
Canada's bill C-22 mandates mass metadata surveillance
Mar 15, 2026
Hacker News
LLMs can be exhausting
Mar 15, 2026
Hacker News
The 49MB web page
Mar 15, 2026
Hacker News
Chrome DevTools MCP (2025)
Mar 15, 2026
Ready to take action?
Start your free Mewayz trial today
All-in-one business platform. No credit card required.
Start Free →14-day free trial · No credit card · Cancel anytime