2017-06-20 17 views
9

Dường như không tìm được câu trả lời dứt khoát. Tôi muốn làm một gợi ý kiểu cho một hàm và kiểu là một số lớp tùy chỉnh mà tôi đã định nghĩa, gọi nó là CustomClass().Gợi ý loại với các lớp do người dùng xác định

Và sau đó giả sử trong một số chức năng, hãy gọi nó là FuncA(arg), tôi có một đối số có tên là arg. Sẽ cách chính xác để gõ gợi ý FuncA là:

def FuncA(arg: CustomClass):

Hoặc nó sẽ là:

def FuncA(Arg:Type[CustomClass]):?

Trả lời

10

Các cựu là đúng, nếu arg chấp nhận một thể hiện của CustomClass:

def FuncA(arg: CustomClass): 
    # ^instance of CustomClass 

Trong trường hợp bạn muốn lớp CustomClass bản thân (hoặc một subtype), sau đó bạn nên viết:

from typing import Type # you have to import Type 

def FuncA(arg: Type[CustomClass]): 
    # ^CustomClass (class object) itself 

Giống như được viết trong tài liệu về Typing:

class typing.Type(Generic[CT_co])

Một biến chú thích với C có thể chấp nhận một giá trị kiểu C. Trong Ngược lại, một biến chú thích với Type[C] có thể chấp nhận các giá trị mà là lớp mình - đặc biệt, nó sẽ chấp nhận lớp đối tượng của C.

Các tài liệu bao gồm một ví dụ với lớp int:

a = 3   # Has type 'int' 
b = int  # Has type 'Type[int]' 
c = type(a) # Also has type 'Type[int]' 
+1

là 'Type' từ py3.6 và xa hơn nữa? Tôi chỉ nhận được một 'NameError'. –

+0

@ Tốc độ: không, nhưng bạn phải nhập. Thay đổi điều đó trong câu trả lời. –

+0

Lưu ý rằng nếu bạn có lớp trong cùng một tệp, nó cần phải tồn tại tại thời điểm gợi ý loại được đánh giá ... – 576i

Các vấn đề liên quan