python这是什么数据类型?

时间:2015-08-22 11:47:27

标签: python types zeroconf

我是python的新手,目前正在使用zeroconf库。

当我尝试在网络上注册服务时,我在功能定义中看到了这一点:

def register_service(self, info, ttl=_DNS_TTL):
    """Registers service information to the network with a default TTL
    of 60 seconds.  Zeroconf will then respond to requests for
    information for that service.  The name of the service may be
    changed if needed to make it unique on the network."""
    self.check_service(info)
    self.services[info.name.lower()] = info
    if info.type in self.servicetypes:
        self.servicetypes[info.type] += 1
    else:
        self.servicetypes[info.type] = 1
    now = current_time_millis()
    next_time = now
    i = 0
    while i < 3:
        if now < next_time:
            self.wait(next_time - now)
            now = current_time_millis()
            continue
        out = DNSOutgoing(_FLAGS_QR_RESPONSE | _FLAGS_AA)
        out.add_answer_at_time(DNSPointer(info.type, _TYPE_PTR,
                                          _CLASS_IN, ttl, info.name), 0)
        out.add_answer_at_time(DNSService(info.name, _TYPE_SRV,
                                          _CLASS_IN, ttl, info.priority, info.weight, info.port,
                                          info.server), 0)
        out.add_answer_at_time(DNSText(info.name, _TYPE_TXT, _CLASS_IN,
                                       ttl, info.text), 0)
        if info.address:
            out.add_answer_at_time(DNSAddress(info.server, _TYPE_A,
                                              _CLASS_IN, ttl, info.address), 0)
        self.send(out)
        i += 1
        next_time += _REGISTER_TIME

任何人都知道info的类型是什么?

修改
感谢您提供的答案是ServiceInfo课程。除了docstring在搜索它时提供这个答案的事实。我还不清楚:

  • 进程专家python程序员在遇到这种情况时会遵循 - 找到info的数据类型需要采取哪些步骤来说明当docstring不可用时?
  • 当我们没有将类类型指定为info的输入参数的一部分时,python解释器知道register_service是ServiceInfo类的吗?如何知道info.type是有效的属性,并说info.my_property不是?

2 个答案:

答案 0 :(得分:2)

这是ServiceInfo类的实例。

可以从阅读代码和文档字符串中推断出来。 register_service调用check_service函数,我引用该函数“检查网络是否有唯一的服务名称,如果它不是唯一的,则修改传入的ServiceInfo”。

答案 1 :(得分:1)

看起来它应该是ServiceInfo。在存储库的示例中找到:

https://github.com/jstasiak/python-zeroconf/blob/master/examples/registration.py

修改

  1. 我不确定该说什么,除了&#34;我必须采取任何方式&#34;。在实践中,我真的不记得界面的合同没有完全清楚的时候,因为这只是使用Python的一部分。出于这个原因,文档更像是要求
  2. 简短的回答是,&#34;它没有&#34;。 Python使用&#34; duck typing&#34;的概念。其中任何支持合同必要操作的对象都是有效的。您可以给它任何具有代码使用的所有属性的值,并且它不会知道差异。因此,根据第1部分,最糟糕的情况是,你只需要追溯对象的每次使用,只要传递它并提供满足所有要求的对象,如果你错过了一块,你就会得到一个任何使用它的代码路径的运行时错误。
  3. 我也喜欢静态打字。在很大程度上,我认为文档和单元测试只会变得更难以满足要求&#34;在使用动态类型时,因为编译器无法为您完成任何工作。