【问题标题】:passing primitive datatype name as function argument in python在python中将原始数据类型名称作为函数参数传递
【发布时间】:2018-09-07 10:25:34
【问题描述】:

我是一名尝试学习 Python 的 Java 程序员,因此我试图将这两种语言联系起来。

最近我开始使用 PyQt5 库。我正在关注我们使用的 udemy 教程

custom_signal = pyqtSignal(str)

然后在我们的插槽中,数据以字符串形式出现。如果我们使用

custom_signal = pyqtSignal(int)

然后数据将作为整数传递给槽。

谁能解释一下内部发生的事情。为什么我们将数据类型名称传递给类的构造函数 (pyqtSignal(int))。它与Java中的通用类型之类的东西有关吗?

List<Integer> list = new ArrayList<Integer>();

由于上面的变量只接受整数,所以pyqtSignal(int)也类似?

有人能解释一下吗?这可能很愚蠢,但我只是想了解里面发生了什么。我试图观看 pyqtSignal 类的源代码,但我无法在任何地方在线找到相同的源代码。

还有谁能告诉我内部发生的对象创建过程,例如调用了哪些特殊方法(_new_、_init_ 等)以及为了什么目的以什么顺序调用。

提前致谢

【问题讨论】:

    标签: python python-3.x pyqt5


    【解决方案1】:

    pyqtSignal 实际上是一个工厂,它使用您传递的参数生成一个新的signal

    工厂方法的定义如下:

    PyQt5.QtCore.pyqtSignal(types[, name[, revision=0[, arguments=[]]]])
    

    意思是如果你想定义一个名为 rangeChanged 的信号,它接受两个整数参数,你应该执行以下操作:

    range_changed = pyqtSignal(int, int, name='rangeChanged')
    

    您可以阅读更多关于这家工厂的信息here

    关于 dunder 方法 (__name__) 或其他称为魔法方法 - 可以在 here 找到一个很好的解释。

    【讨论】:

    • "types[, name[, revision=0[, arguments=[]]]]" 这个参数在 python 中是什么意思?是列表吗?
    • 这只是功能说明;这是一个相当广泛的行业使用标准,以这种方式指定参数。 - 方括号中的所有内容都可以省略;意味着它们是可选的。
    • 如果您想了解更多,这里有更多解释:stackoverflow.com/questions/10053286/…
    • 关于 dunder 方法;这是一个相当广泛的讨论;这种情况可以持续数天甚至数周。 - 例如:当继承一个元类时,元类init首先被触发,然后call函数;名单还在继续。
    • 很高兴它帮助了你,伙计,如果你需要什么;让我知道。 :) - 如果是正确答案,别忘了将其标记为答案。
    猜你喜欢
    • 2012-11-25
    • 2010-12-18
    • 2015-04-04
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2011-01-14
    相关资源
    最近更新 更多