Hướng dẫn isinstance python là gì

Hàm isinstance() tích hợp sẵn trong Python kiểm tra xem môt đối tượng (tham số thứ nhất) là một instance hay là một lớp con của Classinfo (tham số thứ hai).

Cú pháp hàm isinstance() trong Python

isinstance(object, classinfo)

Các tham số của hàm isinstance()

Hàm isinstance() có 2 tham số:

  • object: đối tượng cần kiểm tra
  • classinfo: class, type, hoặc tuple

Giá trị trả về từ isinstance()

Hàm isinstance() trả về:

  • True nếu đối tượng là một instance hoặc một lớp con subclass của lớp hoặc bất kỳ phần tử nào của bộ dữ liệu.
  • False nếu ngược lại.

Ví dụ, nếu tham số classinfo là một tuple, hàm này sẽ trả về True nếu đối tượng là một kiểu trong tuple.

Ví dụ: Hàm isinstance() hoạt động thế nào?

class Foo:
  a = 5
  
fooInstance = Foo()

print(isinstance(fooInstance, Foo))
print(isinstance(fooInstance, (list, tuple)))
print(isinstance(fooInstance, (list, tuple, Foo)))

Chạy chương trình, kết quả trả về là:

True
False
True

Xem thêm: Các hàm Python tích hợp sẵn

Hàm isinstance() tích hợp sẵn trong Python kiểm tra xem môt đối tượng (tham số thứ nhất) là một instance hay là một lớp con của Classinfo (tham số thứ hai).

Cú pháp hàm isinstance() trong Python

isinstance(object, classinfo)

Các tham số của hàm isinstance()

Hàm isinstance() có 2 tham số:

    Giá trị trả về từ isinstance()

    Hàm isinstance() trả về:

    • True nếu đối tượng là một instance hoặc một lớp con subclass của lớp hoặc bất kỳ phần tử nào của bộ dữ liệu.
    • False nếu ngược lại.

    Ví dụ, nếu tham số classinfo là một tuple, hàm này sẽ trả về True nếu đối tượng là một kiểu trong tuple.

    Ví dụ: Hàm isinstance() hoạt động thế nào?

    class Foo:     a = 5        fooInstance = Foo()      print(isinstance(fooInstance, Foo))   print(isinstance(fooInstance, (list, tuple)))   print(isinstance(fooInstance, (list, tuple, Foo)))

    Chạy chương trình, kết quả trả về là:

    True   False   True

    Xem thêm: Các hàm Python tích hợp sẵn

    Code:

    Nội dung chính Show

    • Giới thiệu
    • Python isinstance () cơ bản
    • Ví dụ về Python isinstance ()
    • 1. Sử dụng isInstance () với các lớp bản địa trong Python
    • 2. Sử dụng isInstance () với các lớp do người dùng xác định
    • 3. Sử dụng isInstance () cho nhiều lớp
    • Sự kết luận
    • Người giới thiệu

    import types
    
    
    class C(object):
        pass
    
    
    c = C()
    print(isinstance(c, types.InstanceType))
    

    Output:

    False
    

    Cách chính xác để kiểm tra xem đối tượng có phải là thể hiện của lớp do người dùng xác định cho các lớp kiểu mới không?

    UPD:

    Tôi muốn nhấn mạnh thêm vào việc kiểm tra xem loại đối tượng có được xác định bởi người dùng không. Theo tài liệu:

    loại.InstanCetype Loại thể hiện của các lớp do người dùng xác định.
    The type of instances of user-defined classes.

    UPD2:

    Được rồi - không phải cách "chính xác" cũng ổn.

    UPD3:

    Cũng nhận thấy rằng không có loại cho

    False
    
    1 trong mô -đun
    False
    
    2

    Đã hỏi ngày 30 tháng 1 năm 2013 lúc 20:16Jan 30, 2013 at 20:16

    Gill Batesgill BatesGill Bates

    11.9K22 Huy hiệu vàng65 Huy hiệu bạc137 Huy hiệu Đồng22 gold badges65 silver badges137 bronze badges

    4

    Bạn có thể kết hợp kiểm tra

    False
    
    3 với sự hiện diện (hoặc không) của
    False
    
    4 hoặc
    False
    
    5, như một cách hacky để phân biệt giữa cả lớp mới/kiểu cũ và đối tượng người dùng/xây dựng.

    Trên thực tế, các đề xuất chính xác này xuất hiện trong https://stackoverflow.com/a/2654806/1832154

    def is_instance_userdefined_and_newclass(inst):
        cls = inst.__class__
        if hasattr(cls, '__class__'):
            return ('__dict__' in dir(cls) or hasattr(cls, '__slots__'))
        return False
    

    >>> class A: pass
    ... 
    >>> class B(object): pass
    ... 
    >>> a = A()
    >>> b = B()
    >>> is_instance_userdefined_and_newclass(1)
    False
    >>> is_instance_userdefined_and_newclass(a)
    False
    >>> is_instance_userdefined_and_newclass(b)
    True
    

    Đã trả lời ngày 1 tháng 2 năm 2013 lúc 20:40Feb 1, 2013 at 20:40

    6

    Tôi không chắc chắn về cách "chính xác", nhưng một cách dễ dàng để kiểm tra đó là các trường hợp của các lớp kiểu cũ có kiểu 'thể hiện' thay vì lớp thực tế của chúng.

    Vì vậy,

    False
    
    6 hoặc
    False
    
    7 nên cả hai nên làm việc.
    >>> class Old:
    ...     pass
    ...
    >>> class New(object):
    ...     pass
    ...
    >>> x = Old()
    >>> y = New()
    >>> type(x) is x.__class__
    False
    >>> type(y) is y.__class__
    True
    >>> type(x) is types.InstanceType
    True
    >>> type(y) is types.InstanceType
    False
    

    Đã trả lời ngày 30 tháng 1 năm 2013 lúc 20:20Jan 30, 2013 at 20:20

    AntinonionantimonAntimony

    36,5K10 Huy hiệu vàng100 Huy hiệu bạc103 Huy hiệu đồng10 gold badges100 silver badges103 bronze badges

    12

    Điều này cho chúng ta biết đúng nếu nó là.

    if issubclass(checkthis, (object)) and 'a' not in vars(__builtins__):print"YES!"
    

    Đối số thứ hai là một tuple của các lớp sẽ được kiểm tra. Điều này rất dễ hiểu và tôi chắc chắn rằng nó hoạt động. [Chỉnh sửa (đối tượng) đến (đối tượng,) Cảm ơn Duncan!]

    Đã trả lời ngày 2 tháng 2 năm 2013 lúc 16:23Feb 2, 2013 at 16:23

    không ʎzɐɹɔnoɥʇʎzɐɹɔzɐɹɔnoɥʇʎԀʎzɐɹƆ

    9.1892 Huy hiệu vàng46 Huy hiệu bạc65 Huy hiệu Đồng2 gold badges46 silver badges65 bronze badges

    3

    Có lẽ tôi có thể đi với phương thức loại bỏ - không kiểm tra xem đối tượng có phải là phiên bản của lớp do người dùng xác định không -

    False
    
    8, nhưng kiểm tra xem đối tượng không phải là một trong các loại 'cơ bản'.

    Đã trả lời ngày 30 tháng 1 năm 2013 lúc 21:03Jan 30, 2013 at 21:03

    Gill Batesgill BatesGill Bates

    11.9K22 Huy hiệu vàng65 Huy hiệu bạc137 Huy hiệu Đồng22 gold badges65 silver badges137 bronze badges

    Giới thiệu

    Trong hướng dẫn này, chúng tôi sẽ đi qua phương thức Python isinstance (). Người dùng có thể gặp phải một số tình huống mà cô ấy cần để xác định xem một đối tượng có phải là một thể hiện của một lớp cụ thể hay không, chủ yếu là thừa kế. Python cung cấp một phương pháp được xây dựng, hãy kiểm tra giống nhau, được đặt tên là

    False
    
    9.inheritance. Python provides an in-built method do check the same, named
    False
    
    9.

    Hãy để hiểu đúng để hiểu phương pháp này.

    Python isinstance () cơ bản

    Như tên cho thấy, phương pháp Python

    False
    
    9 là phương thức được xây dựng, kiểm tra xem một đối tượng có phải là một thể hiện của bất kỳ lớp cụ thể nào hay không. Bây giờ, chúng ta hãy nhìn vào cú pháp để sử dụng phương thức
    False
    
    9,instance of any particular class or not. Now, let us look at the syntax for using the
    False
    
    9 method,

    Syntax,,

    isinstance( object_name , class_name)
    

    Here,

    • def is_instance_userdefined_and_newclass(inst):
          cls = inst.__class__
          if hasattr(cls, '__class__'):
              return ('__dict__' in dir(cls) or hasattr(cls, '__slots__'))
          return False
      
      2 là đối tượng mà chúng ta cần kiểm tra xem đó có phải là một thể hiện của một số lớp hay không,
    • def is_instance_userdefined_and_newclass(inst):
          cls = inst.__class__
          if hasattr(cls, '__class__'):
              return ('__dict__' in dir(cls) or hasattr(cls, '__slots__'))
          return False
      
      3 là lớp mà chúng ta cần kiểm tra đối tượng thuộc về hay không,
    • Phương thức
      False
      
      9 trả về true nếu object_name là một thể hiện của class_name nếu không trả về false.true if the object_name is an instance of the class class_name or else returns false.

    Ví dụ về Python isinstance ()

    Vì vậy, vì bây giờ chúng tôi được thực hiện với định nghĩa cơ bản và cú pháp cho phương pháp Python

    False
    
    9. Chúng ta hãy xem xét một số ví dụ để hiểu rõ hơn về cách thức hoạt động của phương pháp.

    1. Sử dụng isInstance () với các lớp bản địa trong Python

    Bây giờ, chúng ta hãy xem những gì xảy ra khi chúng ta sử dụng phương thức

    False
    
    9 cho các lớp bản địa trong Python như Int, Float, Str, Danh sách, Diễn ngôn và Tuple.int, float, str, list, dict, and tuple.
    i=10
    f=55.55
    s="AskPython"
    l=[1,2,3,4,5]
    d={0:"n", 1:"y"}
    t=(1,2,3,4)
    print("isinstance(i,int)=",isinstance(i,int))
    print("isinstance(f,int)=",isinstance(f,float))
    print("isinstance(s,int)=",isinstance(s,str))
    print("isinstance(l,int)=",isinstance(l,list))
    print("isinstance(d,int)=",isinstance(d,dict))
    print("isinstance(t,int)=",isinstance(t,tuple))
    

    Output::

    Python isinstance () cho các lớp bản địa

    Hãy để hiểu những gì mà xảy ra ở đây:

    • Lúc đầu, chúng tôi đã khởi tạo các biến của các loại khác nhau với một số giá trị
    • Sau đó, chúng tôi kiểm tra xem chúng có phải là trường hợp của các lớp tương ứng hay không. Và như mong đợi cho tất cả các kiểm tra, chúng tôi nhận được đầu ra tích cực, đó là, đúng.true.

    2. Sử dụng isInstance () với các lớp do người dùng xác định

    Bây giờ chúng ta hãy tạo một số lớp và các trường hợp của chúng để kiểm tra xem chúng ta có nhận được đầu ra mong muốn cũng như cách phương thức isinstance hoạt động trong trường hợp đó hay không.

    class dt:
        dd=10
        mm=2
        yyyy=2002
    
    class tm:
        hr=12
        min=56
        sec=34
    #instance creation
    a=dt()
    b=tm()
    
    #check is a is instance of dt class
    print("a is instance of dt?",isinstance(a,dt))
    #check is a is instance of tm class
    print("a is instance of tm?",isinstance(a,tm))
    #check is b is instance of tm class
    print("b is instance of tm?",isinstance(b,tm))
    #check is b is instance of dt class
    print("b is instance of dt?",isinstance(b,dt))
    

    Output::

    Ví dụ với các lớp do người dùng xác định

    Trong mã này:

    • Chúng tôi tạo hai lớp
      def is_instance_userdefined_and_newclass(inst):
          cls = inst.__class__
          if hasattr(cls, '__class__'):
              return ('__dict__' in dir(cls) or hasattr(cls, '__slots__'))
          return False
      
      7 và
      def is_instance_userdefined_and_newclass(inst):
          cls = inst.__class__
          if hasattr(cls, '__class__'):
              return ('__dict__' in dir(cls) or hasattr(cls, '__slots__'))
          return False
      
      8Symbolizing ngày và thời gian tương ứng
    • Sau đó, chúng tôi tạo hai đối tượng của cả hai lớp có tên A và B tương ứnga and b respectively
    • Sau đó, chúng tôi kiểm tra xem các đối tượng A và B có phải là trường hợp của các lớp
      def is_instance_userdefined_and_newclass(inst):
          cls = inst.__class__
          if hasattr(cls, '__class__'):
              return ('__dict__' in dir(cls) or hasattr(cls, '__slots__'))
          return False
      
      7 và
      >>> class A: pass
      ... 
      >>> class B(object): pass
      ... 
      >>> a = A()
      >>> b = B()
      >>> is_instance_userdefined_and_newclass(1)
      False
      >>> is_instance_userdefined_and_newclass(a)
      False
      >>> is_instance_userdefined_and_newclass(b)
      True
      
      0 hay không. Sử dụng các kết hợp khác nhau, chúng tôi cố gắng giải thích những gì xảy ra nếu đối tượng không phải là một thể hiện của lớp được chỉ địnha and b are instances of the
      def is_instance_userdefined_and_newclass(inst):
          cls = inst.__class__
          if hasattr(cls, '__class__'):
              return ('__dict__' in dir(cls) or hasattr(cls, '__slots__'))
          return False
      
      7 and
      >>> class A: pass
      ... 
      >>> class B(object): pass
      ... 
      >>> a = A()
      >>> b = B()
      >>> is_instance_userdefined_and_newclass(1)
      False
      >>> is_instance_userdefined_and_newclass(a)
      False
      >>> is_instance_userdefined_and_newclass(b)
      True
      
      0 classes. Using different combinations we try to explain what happens if the object is not an instance of the specified class
    • Như chúng ta có thể thấy, mã của chúng tôi xác nhận rằng A và B là các trường hợp của các lớp DT và TM tương ứng.dt and tm respectively.
    • Nhưng phương pháp
      >>> class A: pass
      ... 
      >>> class B(object): pass
      ... 
      >>> a = A()
      >>> b = B()
      >>> is_instance_userdefined_and_newclass(1)
      False
      >>> is_instance_userdefined_and_newclass(a)
      False
      >>> is_instance_userdefined_and_newclass(b)
      True
      
      1 trả về sai khi chúng tôi cố gắng kiểm tra xem A và B có phải là trường hợp của các lớp TM và DT tương ứng hay không. Đó là, đối diện.false when we try to check whether a and b are instances of tm and dt classes respectively. That is, opposite.

    3. Sử dụng isInstance () cho nhiều lớp

    Phương pháp Python

    False
    
    9 cũng cung cấp một biện pháp nếu chúng tôi muốn kiểm tra xem một đối tượng có phải là một thể hiện của bất kỳ lớp nào trong số một số lớp nhất định hay không.

    Trong trường hợp đó, chúng ta cần phải vượt qua một tuple của các lớp cần thiết. Phương thức sẽ trả về

    >>> class A: pass
    ... 
    >>> class B(object): pass
    ... 
    >>> a = A()
    >>> b = B()
    >>> is_instance_userdefined_and_newclass(1)
    False
    >>> is_instance_userdefined_and_newclass(a)
    False
    >>> is_instance_userdefined_and_newclass(b)
    True
    
    3 nếu đối tượng là một thể hiện của bất kỳ lớp nào hoặc nếu không trả về
    >>> class A: pass
    ... 
    >>> class B(object): pass
    ... 
    >>> a = A()
    >>> b = B()
    >>> is_instance_userdefined_and_newclass(1)
    False
    >>> is_instance_userdefined_and_newclass(a)
    False
    >>> is_instance_userdefined_and_newclass(b)
    True
    
    4.tuple of the required classes. The method will return
    >>> class A: pass
    ... 
    >>> class B(object): pass
    ... 
    >>> a = A()
    >>> b = B()
    >>> is_instance_userdefined_and_newclass(1)
    False
    >>> is_instance_userdefined_and_newclass(a)
    False
    >>> is_instance_userdefined_and_newclass(b)
    True
    
    3 if the object is an instance of any class, or else returns
    >>> class A: pass
    ... 
    >>> class B(object): pass
    ... 
    >>> a = A()
    >>> b = B()
    >>> is_instance_userdefined_and_newclass(1)
    False
    >>> is_instance_userdefined_and_newclass(a)
    False
    >>> is_instance_userdefined_and_newclass(b)
    True
    
    4.
    class dt:
        dd=10
        mm=2
        yyyy=2002
    
    class tm:
        hr=12
        min=56
        sec=34
    #instance creation
    a=dt()
    b=tm()
    
    #check is a is instance of dt or tm class
    print("a is instance of dt or tm?",isinstance(a,(dt,tm)))
    #check is b is instance of dt or tm class
    print("b is instance of dt or tm?",isinstance(b,(dt,tm)))
    

    Output::

    False
    
    0

    Ở đây, chúng tôi sử dụng cùng một lớp DT và TM như chúng tôi đã sử dụng trong ví dụ trước của chúng tôi. Nhưng trong trường hợp này, chúng tôi chuyển một bộ của hai lớp cho phương pháp

    False
    
    9.dt and tm as we used in our previous example. But in this case, we pass a tuple of the two classes to the
    False
    
    9 method.

    Vì A và B là trường hợp của bất kỳ một trong các lớp trong bộ tuple mà chúng tôi đã vượt qua, chúng tôi có thể thấy

    >>> class A: pass
    ... 
    >>> class B(object): pass
    ... 
    >>> a = A()
    >>> b = B()
    >>> is_instance_userdefined_and_newclass(1)
    False
    >>> is_instance_userdefined_and_newclass(a)
    False
    >>> is_instance_userdefined_and_newclass(b)
    True
    
    3 trong cả hai đầu ra.a and b are instances of any one of the classes in the tuple we passed, we get to see
    >>> class A: pass
    ... 
    >>> class B(object): pass
    ... 
    >>> a = A()
    >>> b = B()
    >>> is_instance_userdefined_and_newclass(1)
    False
    >>> is_instance_userdefined_and_newclass(a)
    False
    >>> is_instance_userdefined_and_newclass(b)
    True
    
    3 in both the outputs.

    Sự kết luận

    Vì vậy, trong hướng dẫn này, chúng tôi phải tìm hiểu về phương pháp Python

    False
    
    9 cùng với việc sử dụng và làm việc của nó. Hy vọng hướng dẫn này giúp tìm hiểu khái niệm về các trường hợp.

    Người giới thiệu

    • https://www.journaldev.com/22932/python-isinstance