如何理解在Python中使用help方法来查看模块的信息和方法?

时间:2018-07-04 03:28:56

标签: python-2.7 dns

一个例子:

  1. DNS的A记录

Internet中DNS的A记录的示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2017/10/1 9:58 
# @File : DNS.py 
# @Software: PyCharm
import dns.resolver
domain = input("Please input Domain name:")       
A = dns.resolver.query(domain, 'A')         
for i in A.response.answer:             
# print(i)              
    for j in i.items:                   
        print(j)

这里dns.resolver是一个模块,我可以根据“ help> dns.resolver”找到该模块的类以及相应的方法,例如其“查询”方法

我要确认response.answer是dns.resolver方法,找到以下信息:

  class Answer(__builtin__.object)

 |  DNS stub resolver answer

 |  

 |  Instances of this class bundle up the result of a successful DNS

 |  resolution.

 |  

 |  For convenience, the answer object implements much of the sequence

 |  protocol, forwarding to its rrset.  E.g. "for a in answer" is

 |  equivalent to "for a in answer.rrset", "answer" is equivalent

 |  to "answer.rrset", and "answer[i:j]" is equivalent to

 |  "answer.rrset[i:j]".

 |  

 |  Note that CNAMEs or DNAMEs in the response may mean that answer

 |  node's name might not be the query name.

 |  

 |  @ivar qname: The query name

 |  @type qname: dns.name.Name object

 |  @ivar rdtype: The query type

 |  @type rdtype: int

 |  @ivar rdclass: The query class

 |  @type rdclass: int

 |  @ivar response: The response message
 |  @type response: dns.message.Message object

 |  @ivar rrset: The answer

 |  @type rrset: dns.rrset.RRset object

 |  @ivar expiration: The time when the answer expires

 |  @type expiration: float (seconds since the epoch)

 |  @ivar canonical_name: The canonical name of the query name

 |  @type canonical_name: dns.name.Name object

第一个问题:

这里的“答案”是一个类,那么以下@ivar响应和@type响应是什么意思?如何判断response.answer是一种方法?

第二个问题:

A = dns.resolver.query(domain, 'A')

这里是物体吗?据我了解:

Object = module. class()

但是这里的示例格式是:

A = module. method (parameter),

这种格式还能生成对象吗?

第三个问题:

A = dns.resolver.query(domain, 'A')

如果这里A是一个对象,请遵循以下这一行:

for i in A.response.answer:

作为A的对象,我可以继续在A上使用模块dns.resolver方法“ response.answer”吗,我的理解正确吗?

1 个答案:

答案 0 :(得分:0)

问题1:

  

这里的“答案”是一个类,那么以下@ivar响应和@type响应是什么意思?如何判断response.answer是一种方法?

@ivar和@type基本上分别是变量名和变量类型。 此代码编写正确。因此,要告诉用户每个变量的作用以及每个变量的类型是程序员所使用的约定。 您有时还会看到@param @type @rtype @return等。

第二部分,您可以看到

 @ivar response: The response message
 @type response: dns.message.Message object

表示响应变量是dns.message.Message类的对象。 因此,它将具有一些与其关联的属性和方法。有关更多信息,请参见此类dns.message.Message的帮助。

问题2:

  

A = dns.resolver.query(domain,'A')

     

这里是物体吗?据我了解:

     

Object =模块。 class()

     

但是这里的示例格式是:

     

A =模块。方法(参数)

     

这种格式还能生成对象吗?

一切都是python中的对象。  对于对象=模块。类() 不一定总是这样,您可以使用方法/函数来创建类的对象。

基本上,任何函数定义都将创建某种类型的新对象。例如

def sum():
    return 10

此简单函数还创建一个int类型的对象。现在,您可以修改参数/定义以获取特定种类的对象。

对于您来说,当我们有一些带有服务器连接/数据库连接/ Web连接api等应用程序时。每个说两个实体。

  1. 连接请求
  2. 连接响应

例如,假设您将GET请求发送到服务器,并且服务器以200 OK(连接成功)进行响应。您的GET请求将是连接请求,200 OK是连接响应。 在对这种行为进行编程时,我们通常会有一个request方法,该方法将向我返回Response类的对象。

第三个问题:

  

A = dns.resolver.query(domain,'A')

     

如果这里A是一个对象,请遵循以下这一行:

     

对于A.response.answer.i中的我:

     

作为对象,我可以继续使用模块dns.resolver方法吗   A上的“ response.answer”,我的理解正确吗?

是的,如果response.answer是与A关联的方法,那么您当然可以使用它。