在Python中的内省

在Python中的内省

在这个教程中,我们将介绍内省,这是Python编程语言的最大优势。让我们简要介绍一下内省。

什么是内省

内省是一种在运行时确定对象类型的技术。正如我们所知,Python中的一切都是对象,并且有广泛支持各种内省方法。它是一种检查其他模块和函数在内存中作为对象的代码,获取有关它们的信息并对它们进行操作的方式。它提供了获取对象属性和属性的便利。使用内省,我们可以动态检查Python对象。

Python是一种动态的、面向对象的、支持内省的语言,它在深入和广泛的范围内运行。内省功能使它比其他语言更强大。

Python提供了许多函数和工具用于代码内省。我们还可以使用无名称来定义调用函数和引用函数。

dir()函数

dir()函数返回一个按属性和方法排序的列表,该列表属于一个对象。让我们理解下面的示例,它使用dir()函数返回在给定程序中可以使用的所有方法的名称。

示例

myList = [1,2,3,4,5]
print(dir(myList))

输出:

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

dir()函数返回列表对象使用的所有方法和属性。

示例2:

print("The methods and attributes is used with integer: ")
num = 5
print(dir(num))
print("The methods and attributes is used with string: ")
string = 'javatpoint'
print(dir(string))

输出:

The methods and attributes are used with integer: 
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
The methods and attributes are used with string: 
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

Python type()函数

type()函数返回对象的类型。让我们理解以下示例。

示例

num = 5
print(type(num))

string = 'javatpoint'
print(type(string))

输出:

<class 'int'>
<class 'str'>

示例2:

import sys
def function(): 
    pass

class MyClass(object):

   def __init__(self):
      pass

obj = MyObject()

print(type(1))
print(type(""))
print(type([]))
print(type({}))
print(type(()))
print(type(object))
print(type(function))
print(type(MyClass))
print(type(obj))
print(type(sys))

输出:

<class 'int'>
<class 'str'>
<class 'list'>
<class 'dict'>
<class 'tuple'>
<class 'type'>
<class 'function'>
<class 'type'>
<class '__main__.MyClass'>
<class 'module'>

Python hasattr() 函数

hasattr() 函数用于检查对象是否具有某个属性。根据结果,如果对象具有给定的属性,则返回 True,否则返回 False。让我们来理解下面的示例。

示例

class student: 
    name = "Tony"
    age = 25  
obj = student()
print(hasattr(obj, 'name')) 
print(hasattr(obj, 'gpa'))

输出:

True
False

Python id()函数

id()函数返回对象的特殊id。让我们理解以下示例。

示例

import sys
def function(): 
    pass

class MyClass(object):

   def __init__(self):
      pass

obj = MyClass()

print("The integer id is: ", id(1))
print("The string id is: ", id(""))
print("The list id is: ",id([]))
print("The set id is: ",id({}))
print("The list id is: ",id(()))
print("The object id is: ",id(object))
print("The functio id is: ",id(function))
print("The MyClass id is: ",id(MyClass))
print("The obj id is: ",id(obj))
print("The sys module id is: ",id(sys))

输出:

The integer id is:  140736928548512
The string id is:  2423227163376
The list id is:  2423232862400
The set id is:  2423232820480
The list id is:  2423226957888
The object id is:  140736928328528
The functio id is:  2423231111520
The MyClass id is:  2423225796064
The obj id is:  2423232892640
The sys module id is:  2423227235840

Python sys模块

sys模块允许我们与由解释器使用或维护的系统特定变量和函数进行交互,以及与解释器强烈互动的功能。让我们理解以下示例。

示例

import sys
print(sys.version)
print(sys.platform)
print(sys.path)

输出:

3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]
win32
['d:\\Python Project', 'D:\\python_project\\Myfirstdjangoproject\\Hello', 'c:\\users\\User\\appdata\\local\\programs\\python\\python38\\python38.zip', 'c:\\users\\User\\appdata\\local\\programs\\python\\python38\\DLLs', 'c:\\users\\User\\appdata\\local\\programs\\python\\python38\\lib', 'c:\\users\\User\\appdata\\local\\programs\\python\\python38', 'C:\\Users\\User\\.virtualenvs\\Django-ExvyqL3O', 'C:\\Users\\User\\.virtualenvs\\Django-ExvyqL3O\\lib\\site-packages']

我们在上面的代码中检查了Python版本、平台和搜索路径。

其他一些内省方法

以下是一些其他重要的内省方法。

  • vars() – 它包含了所有实例变量(名称和值)的字典。它等同于mycar.dict
  • isinstance() – 它检查一个对象是否属于指定的类。
  • getsizeof() – 它是sys模块的一部分;它包含对象的大小(以字节为单位)。
  • help() – 它基于docstring获取对象的接口帮助。
  • callable() – 它检查一个对象是否可调用。

Python中的内省属性

我们将讨论一些关于对象提供有用信息的属性。让我们看一些重要的内省属性。

  • __name__ - 它显示类、函数或方法的原始名称。
  • __qualname__ - 类、函数或方法的限定名称。当类/函数/方法定义被嵌套时,它通常很有用。
  • __doc__ - 它是一个文档字符串,也可以通过调用内置函数 help() 来检索。
  • __self__ - 它是找到方法的实例。

结论

我们已经讨论了什么是内省及其重要性。我们已经看到了一些重要的方法和示例。要了解更多关于内省的信息,可以查看Python inspect模块。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程