Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ice我真的不记得什么时候接口的契约没有完全清楚,因为这只是使用Python的一部分。出于这个原因,文档更是一项要求 简言之,答案是“没有”。Python使用“duck typing”的概念,其中任何支持契约必要操作的对象都是有效的。您可以给它任何具有代码使用的所有属性的值,但它不会知道它们之间的区别。因此,根据第1部分,最坏的情况是,您只需追溯对象的每次使用,直到它被传递为止,并提供一个满足所有要求的对象,如果您遗漏了一个部分,您将得到使用它的任何代码路径的运行时错误_Python_Types_Zeroconf - Fatal编程技术网

ice我真的不记得什么时候接口的契约没有完全清楚,因为这只是使用Python的一部分。出于这个原因,文档更是一项要求 简言之,答案是“没有”。Python使用“duck typing”的概念,其中任何支持契约必要操作的对象都是有效的。您可以给它任何具有代码使用的所有属性的值,但它不会知道它们之间的区别。因此,根据第1部分,最坏的情况是,您只需追溯对象的每次使用,直到它被传递为止,并提供一个满足所有要求的对象,如果您遗漏了一个部分,您将得到使用它的任何代码路径的运行时错误

ice我真的不记得什么时候接口的契约没有完全清楚,因为这只是使用Python的一部分。出于这个原因,文档更是一项要求 简言之,答案是“没有”。Python使用“duck typing”的概念,其中任何支持契约必要操作的对象都是有效的。您可以给它任何具有代码使用的所有属性的值,但它不会知道它们之间的区别。因此,根据第1部分,最坏的情况是,您只需追溯对象的每次使用,直到它被传递为止,并提供一个满足所有要求的对象,如果您遗漏了一个部分,您将得到使用它的任何代码路径的运行时错误,python,types,zeroconf,Python,Types,Zeroconf,我更喜欢静态类型。在很大程度上,我认为当使用动态类型时,文档和单元测试只是变得“更难的要求”,因为编译器不能为您完成任何这些工作。看起来它应该是一个ServiceInfo。可在存储库的示例中找到: 编辑 除了“无论如何我必须”之外,我真的不知道该说什么。在实践中,我真的不记得有什么时候接口的契约没有完全明确,因为这只是使用Python的一部分。出于这个原因,文档更是一项要求 简言之,答案是“没有”。Python使用“duck typing”的概念,其中任何支持契约必要操作的对象都是有效的。您可

我更喜欢静态类型。在很大程度上,我认为当使用动态类型时,文档和单元测试只是变得“更难的要求”,因为编译器不能为您完成任何这些工作。

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

编辑

  • 除了“无论如何我必须”之外,我真的不知道该说什么。在实践中,我真的不记得有什么时候接口的契约没有完全明确,因为这只是使用Python的一部分。出于这个原因,文档更是一项要求
  • 简言之,答案是“没有”。Python使用“duck typing”的概念,其中任何支持契约必要操作的对象都是有效的。您可以给它任何具有代码使用的所有属性的值,但它不会知道它们之间的区别。因此,根据第1部分,最坏的情况是,您只需追溯对象的每次使用,直到它被传递为止,并提供一个满足所有要求的对象,如果您遗漏了一个部分,您将得到使用它的任何代码路径的运行时错误


  • 我更喜欢静态类型。在很大程度上,我认为当使用动态类型时,文档和单元测试只是变得“更难的要求”,因为编译器无法为您完成任何这些工作。

    您在哪里看到这个定义?我似乎在中找不到
    register\u service
    ,我打算将
    info.\uu class\uuu
    添加到
    register\u service
    函数中,但我无法调用该函数,因为
    info
    是一个输入参数。还有别的方法可以调用这个函数吗?如果我添加了
    info=None
    它会使数据类型无效吗?哦,对不起@ZJM。错误的链接。正确的一点是:有一点没有明确指出:所有代码都需要单元测试,而动态语言中的代码更需要单元测试。因此,如果不确定要传入的数据类型,请查看测试代码传入的数据类型。如果既没有测试也没有文档,就不要使用那个特定的库。它坏了。你在哪里看到这个定义?我似乎在中找不到
    register\u service
    ,我打算将
    info.\uu class\uuu
    添加到
    register\u service
    函数中,但我无法调用该函数,因为
    info
    是一个输入参数。还有别的方法可以调用这个函数吗?如果我添加了
    info=None
    它会使数据类型无效吗?哦,对不起@ZJM。错误的链接。正确的一点是:有一点没有明确指出:所有代码都需要单元测试,而动态语言中的代码更需要单元测试。因此,如果不确定要传入的数据类型,请查看测试代码传入的数据类型。如果既没有测试也没有文档,就不要使用那个特定的库。它坏了。你在哪里看到这个定义?我似乎在中找不到
    register\u service
    ,我打算将
    info.\uu class\uuu
    添加到
    register\u service
    函数中,但我无法调用该函数,因为
    info
    是一个输入参数。还有别的方法可以调用这个函数吗?如果我添加了
    info=None
    它会使数据类型无效吗?哦,对不起@ZJM。错误的链接。正确的一点是:有一点没有明确指出:所有代码都需要单元测试,而动态语言中的代码更需要单元测试。因此,如果不确定要传入的数据类型,请查看测试代码传入的数据类型。如果既没有测试也没有文档,就不要使用那个特定的库。它坏了。你在哪里看到这个定义?我似乎在中找不到
    register\u service
    ,我打算将
    info.\uu class\uuu
    添加到
    register\u service
    函数中,但我无法调用该函数,因为
    info
    是一个输入参数。还有别的方法可以调用这个函数吗?如果我添加了
    info=None
    它会使数据类型无效吗?哦,对不起@ZJM。错误的链接。正确的一点是:有一点没有明确指出:所有代码都需要单元测试,而动态语言中的代码更需要单元测试。因此,如果不确定要传入的数据类型,请查看测试代码传入的数据类型。如果既没有测试也没有文档,就不要使用那个特定的库。它坏了。嗨,阿里克。您在哪些文档字符串中看到了这一点?我在
    zeroconf.py
    模块中搜索了
    info
    的所有实例,没有找到正确定义的实例。只看到它与。(点)符号,例如
    info.type
    info.address
    @snowbound:欢迎来到动态语言的世界!您应该从中吸取教训,在自己的代码中编写好的docstring,在不明显的地方记录数据类型。:)您好@SvenMarnach和Alik,我已经更新了我的原始问题,指出了我不清楚的地方(对不起,我的背景是强类型/编译语言)@编辑中的雪域问题需要很长的答案。我建议您将它们作为单独的问题来处理。@snowbound请参阅(以“类类型(新样式类)和类对象…”开头的一段),以了解python如何知道
    info。type
    是一个有效属性,并且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