คำถามติดแท็ก type-hinting

พิมพ์คำใบ้ผูกอาร์กิวเมนต์ของฟังก์ชันให้กับออบเจ็กต์เฉพาะหรือพิมพ์อย่างมาก

5
คำใบ้ประเภทใดใน Python 3.5
หนึ่งในคุณสมบัติที่ได้รับการกล่าวถึงมากที่สุดใน Python 3.5 คือ ประเภทคำแนะนำ ตัวอย่างของคำแนะนำประเภทถูกกล่าวถึงในบทความนี้และคนนี้ในขณะที่ยังกล่าวถึงคำแนะนำการใช้งานประเภทอย่างมีความรับผิดชอบ ใครสามารถอธิบายเพิ่มเติมเกี่ยวกับพวกเขาและเมื่อพวกเขาควรจะใช้และเมื่อไม่ได้?

3
การเพิ่มค่าพารามิเตอร์เริ่มต้นด้วยคำใบ้ประเภทใน Python
ถ้าฉันมีฟังก์ชั่นเช่นนี้: def foo(name, opts={}): pass และฉันต้องการเพิ่มคำแนะนำประเภทให้กับพารามิเตอร์ฉันจะทำอย่างไร วิธีที่ฉันคิดว่าจะทำให้ฉันมีข้อผิดพลาดทางไวยากรณ์: def foo(name: str, opts={}: dict) -> str: pass ต่อไปนี้ไม่ได้เกิดข้อผิดพลาดทางไวยากรณ์ แต่ดูเหมือนจะเป็นวิธีที่ใช้งานง่ายในการจัดการกรณีนี้: def foo(name: str, opts: dict={}) -> str: pass ฉันไม่พบสิ่งใดในtypingเอกสารหรือในการค้นหาของ Google แก้ไข: ฉันไม่ทราบว่าอาร์กิวเมนต์เริ่มต้นทำงานอย่างไรใน Python แต่เพื่อคำถามนี้ฉันจะเก็บตัวอย่างข้างต้น โดยทั่วไปการทำสิ่งต่อไปนี้ดีกว่ามาก: def foo(name: str, opts: dict=None) -> str: if not opts: opts={} pass

9
วิธีการแก้ไข“ ต้องเป็นอินสแตนซ์ของสตริง, สตริงที่กำหนด” ก่อน PHP 7?
นี่คือรหัสของฉัน: function phpwtf(string $s) { echo "$s\n"; } phpwtf("Type hinting is da bomb"); ผลลัพธ์ใดที่ทำให้เกิดข้อผิดพลาดนี้: ข้อผิดพลาดร้ายแรงที่ตรวจจับได้: อาร์กิวเมนต์ 1 ส่งผ่านไปยัง phpwtf () ต้องเป็นอินสแตนซ์ของสตริง, สตริงที่กำหนด เป็นมากกว่า Orwellian เล็กน้อยที่จะเห็น PHP จดจำและปฏิเสธประเภทที่ต้องการในลมหายใจเดียวกัน มีไฟอยู่ห้าดวง อะไรคือสิ่งที่เทียบเท่าประเภทคำใบ้สำหรับสตริงใน PHP? การพิจารณาโบนัสสำหรับคำตอบที่อธิบายสิ่งที่เกิดขึ้นที่นี่อย่างแน่นอน
217 php  types  type-hinting 

3
วิธีระบุประเภทการคืนสินค้าหลายประเภทโดยใช้คำใบ้ประเภท
ฉันมีฟังก์ชั่นในหลามที่สามารถกลับมาได้หรือbool listมีวิธีการระบุประเภทการคืนสินค้าโดยใช้คำใบ้ประเภทหรือไม่ ตัวอย่างเช่นนี่เป็นวิธีที่ถูกต้องหรือไม่ def foo(id) -> list or bool: ...

4
ไม่สามารถผ่านอาร์กิวเมนต์เป็นโมฆะเมื่อใช้การแนะนำประเภท
รหัสต่อไปนี้: <?php class Type { } function foo(Type $t) { } foo(null); ?> ล้มเหลวขณะใช้งาน: PHP Fatal error: Argument 1 passed to foo() must not be null เหตุใดจึงไม่อนุญาตให้ส่งผ่าน null เช่นเดียวกับภาษาอื่น ๆ
193 php  type-hinting 

1
วิธีระบุชนิดส่งคืน“ nullable” พร้อมคำแนะนำประเภท
สมมติว่าฉันมีฟังก์ชั่น: def get_some_date(some_argument: int=None) -> %datetime_or_None%: if some_argument is not None and some_argument == 1: return datetime.utcnow() else: return None ฉันจะระบุประเภทส่งคืนสำหรับสิ่งที่สามารถเป็นได้Noneอย่างไร

5
ฉันจะบอก PyCharm ได้อย่างไรว่าพารามิเตอร์ประเภทใดที่คาดว่าจะเป็น
เมื่อพูดถึง Constructor และการมอบหมายและการเรียกเมธอด PyCharm IDE ค่อนข้างดีในการวิเคราะห์ซอร์สโค้ดของฉันและการหาว่าตัวแปรแต่ละชนิดควรเป็นอะไร ฉันชอบเมื่อมันถูกต้องเพราะมันให้ข้อมูลโค้ดที่สมบูรณ์และพารามิเตอร์ที่ดีและให้คำเตือนแก่ฉันถ้าฉันพยายามเข้าถึงแอตทริบิวต์ที่ไม่มีอยู่ แต่เมื่อพูดถึงพารามิเตอร์มันไม่รู้อะไรเลย ดร็อปดาวน์การทำให้โค้ดเสร็จสมบูรณ์ไม่สามารถแสดงอะไรได้เนื่องจากพวกเขาไม่รู้ว่าจะใช้พารามิเตอร์ประเภทใด การวิเคราะห์รหัสไม่สามารถมองหาคำเตือนได้ class Person: def __init__(self, name, age): self.name = name self.age = age peasant = Person("Dennis", 37) # PyCharm knows that the "peasant" variable is of type Person peasant.dig_filth() # shows warning -- Person doesn't have a dig_filth method class King: …

3
ชนิดส่งคืนที่ Nullable ใน PHP7
PHP 7 เปิดตัวส่งกลับชนิดประกาศ ซึ่งหมายความว่าตอนนี้ฉันสามารถระบุว่าค่าตอบแทนเป็นคลาสอินเทอร์เฟซอาร์เรย์ callable หรือหนึ่งในประเภทสเกลาร์ที่บอกใบ้ได้ใหม่ซึ่งเป็นไปได้สำหรับพารามิเตอร์ฟังก์ชัน function returnHello(): string { return 'hello'; } บ่อยครั้งที่มันเกิดขึ้นที่ค่าไม่ได้มีอยู่เสมอและคุณอาจส่งคืนบางสิ่งบางอย่างหรือเป็นโมฆะ ในขณะที่คุณสามารถทำให้พารามิเตอร์เป็นโมฆะได้โดยการตั้งค่าเริ่มต้นเป็นโมฆะ ( DateTime $time = null) ดูเหมือนจะไม่เป็นเช่นนั้นสำหรับวิธีการส่งคืน เป็นเช่นนั้นจริงหรือฉันไม่พบวิธีที่จะทำหรือไม่? สิ่งเหล่านี้ใช้ไม่ได้: function returnHello(): string? { return 'hello'; } function returnHello(): string|null { return 'hello'; }

3
พิมพ์คำอธิบายประกอบสำหรับ * args และ ** kwargs
ฉันกำลังลองใช้คำอธิบายประกอบชนิดของ Python พร้อมคลาสเบสที่เป็นนามธรรมเพื่อเขียนอินเตอร์เฟส มีวิธีการอธิบายประเภทที่เป็นไปได้*argsและ**kwargs? ตัวอย่างเช่นเราจะแสดงให้เห็นว่าข้อโต้แย้งที่สมเหตุสมผลกับฟังก์ชั่นนั้นเป็นได้intหรือintไม่? type(args)ให้Tupleเดาว่าฉันจะอธิบายชนิดเป็นUnion[Tuple[int, int], Tuple[int]]แต่ไม่ได้ผล from typing import Union, Tuple def foo(*args: Union[Tuple[int, int], Tuple[int]]): try: i, j = args return i + j except ValueError: assert len(args) == 1 i = args[0] return i # ok print(foo((1,))) print(foo((1, 2))) # mypy does not like this print(foo(1)) …

2
ฉันจะระบุประเภทฟังก์ชันในคำแนะนำประเภทของฉันได้อย่างไร
ฉันต้องการใช้คำแนะนำประเภทในโครงการ Python 3.5 ปัจจุบันของฉัน ฟังก์ชันของฉันควรได้รับฟังก์ชันเป็นพารามิเตอร์ ฉันจะระบุฟังก์ชันประเภทในคำแนะนำประเภทของฉันได้อย่างไร import typing def my_function(name:typing.AnyStr, func: typing.Function) -> None: # However, typing.Function does not exist. # How can I specify the type function for the parameter `func`? # do some processing pass ฉันตรวจสอบPEP 483แต่ไม่พบคำแนะนำประเภทฟังก์ชันที่นั่น

5
พิมพ์คำใบ้รายการประเภทที่ระบุ
การใช้คำอธิบายประกอบฟังก์ชันของ Python 3 เป็นไปได้ที่จะระบุประเภทของรายการที่อยู่ในรายการที่เป็นเนื้อเดียวกัน (หรือคอลเล็กชันอื่น ๆ ) เพื่อวัตถุประสงค์ในการระบุประเภทใน PyCharm และ IDE อื่น ๆ ? ตัวอย่างรหัส pseudo-python สำหรับรายการ int: def my_func(l:list<int>): pass ฉันรู้ว่ามันเป็นไปได้โดยใช้ Docstring ... def my_func(l): """ :type l: list[int] """ pass ... แต่ฉันชอบรูปแบบคำอธิบายประกอบมากกว่าถ้าเป็นไปได้

5
คำใบ้ประเภท Python โดยไม่มีการนำเข้าแบบวนรอบ
ฉันกำลังพยายามแบ่งชั้นเรียนขนาดใหญ่ของฉันออกเป็นสองชั้น โดยพื้นฐานแล้วจะอยู่ในคลาส "หลัก" และมิกซ์อินที่มีฟังก์ชันเพิ่มเติมดังนี้: main.py ไฟล์: import mymixin.py class Main(object, MyMixin): def func1(self, xxx): ... mymixin.py ไฟล์: class MyMixin(object): def func2(self: Main, xxx): # <--- note the type hint ... ขณะนี้ใช้งานได้ดี แต่MyMixin.func2แน่นอนว่าคำใบ้ประเภทไม่สามารถใช้งานได้ ฉันไม่สามารถนำเข้าได้main.pyเนื่องจากฉันได้รับการนำเข้าแบบวนรอบและหากไม่มีคำใบ้ตัวแก้ไขของฉัน (PyCharm) ไม่สามารถบอกได้ว่าselfคืออะไร ฉันใช้ Python 3.4 และยินดีที่จะย้ายไปที่ 3.5 หากมีวิธีแก้ปัญหา มีวิธีใดบ้างที่ฉันสามารถแบ่งคลาสของฉันออกเป็นสองไฟล์และเก็บ "การเชื่อมต่อ" ทั้งหมดไว้เพื่อให้ IDE ของฉันยังคงเสนอการเติมข้อมูลอัตโนมัติให้ฉันและสินค้าอื่น ๆ ทั้งหมดที่มาจากคลาสนั้นรู้ประเภทหรือไม่

2
พิมพ์คำแนะนำใน namedtuple
พิจารณาโค้ดต่อไปนี้: from collections import namedtuple point = namedtuple("Point", ("x:int", "y:int")) หลักปฏิบัติข้างต้นเป็นเพียงวิธีแสดงให้เห็นว่าฉันพยายามบรรลุเป้าหมายอะไร ฉันต้องการทำnamedtupleด้วยคำแนะนำประเภท คุณรู้วิธีที่สวยงามในการบรรลุผลตามที่ตั้งใจไว้หรือไม่?

2
คำอธิบายประกอบประเภทการส่งคืน Python เป็นโมฆะ
ใน python 3.x เป็นเรื่องปกติที่จะใช้คำอธิบายประกอบชนิด return ของฟังก์ชันเช่น: def foo() -> str: return "bar" คำอธิบายประกอบที่ถูกต้องสำหรับประเภท "โมฆะ" คืออะไร? ฉันกำลังพิจารณา 3 ตัวเลือก: def foo() -> None: ไม่ใช่ IMO เชิงตรรกะเพราะNoneไม่ใช่ประเภท def foo() -> type(None): โดยใช้ไวยากรณ์ที่ดีที่สุดที่ฉันรู้จักเพื่อให้ได้NoneTypeมา def foo(): ละเว้นข้อมูลประเภทการส่งคืนที่ชัดเจน ตัวเลือกที่ 2 ดูเหมือนจะสมเหตุสมผลที่สุดสำหรับฉัน แต่ฉันได้เห็นบางกรณีของ 1 แล้ว

1
พิมพ์คำแนะนำด้วยคลาสที่ผู้ใช้กำหนด
ดูเหมือนจะหาคำตอบที่ชัดเจนไม่ได้ CustomClass()ฉันต้องการจะทำคำใบ้ประเภทสำหรับฟังก์ชั่นและชนิดเป็นชั้นเองบางอย่างที่ผมได้กำหนดเรียกมันว่า แล้วสมมติว่าในบางฟังก์ชันเรียกมันว่าFuncA(arg)ฉันมีอาร์กิวเมนต์ชื่อargหนึ่ง วิธีที่ถูกต้องในการพิมพ์คำใบ้FuncAคือ: def FuncA(arg: CustomClass): หรือจะเป็น: def FuncA(Arg:Type[CustomClass]):เหรอ?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.