Hướng dẫn python isinstance of user-defined class - python là sự hỗ trợ của lớp do người dùng xác định

Code:

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ướng dẫn python isinstance of user-defined class - python là sự hỗ trợ của lớp do người dùng xác định

Đã 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

Hướng dẫn python isinstance of user-defined class - python là sự hỗ trợ của lớp do người dùng xác định

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::

Hướng dẫn python isinstance of user-defined class - python là sự hỗ trợ của lớp do người dùng xác định
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::

Hướng dẫn python isinstance of user-defined class - python là sự hỗ trợ của lớp do người dùng xác định
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