pyspark/sql/types.py
中的Spark Row
类不包含__init__
方法,但显示__new__
的以下重载类型提示:
@overload
def __new__(cls, *args: str) -> "Row"
@overload
def __new__(cls, **kwargs: Any) -> "Row"
def __new__(cls, *args: Optional[str], **kwargs: Optional[Any]) -> "Row"
Row
的文档字符串显示了各种实例化:
>>> Person = Row("name", "age")
>>> row1 = Row("Alice", 11) # This is the one that is hard to understand
>>> row2 = Row(name="Alice", age=11)
>>> row1 == row2
True
上面的second行不适合任何超载的原型.
它almost与原型匹配*args
,除了所有
在支持*args
的论点中,应该有strings个.这是
显然不是Row("Alice",11)
的情况,而是那个调用
在REPL提示符下发出时,不会生成任何消息.
显然,我遗漏了一些关于
类型提示和重载工作.有没有人能解释一下?
P.S.对于上下文,
我通过try 了解构造函数是如何实现的
知道Row("name","age")
指定字段名称,而
Row("Alice", 11)
指定字段值.的源代码
__new__
表示这取决于参数列表是否为
*args
或**kwargs
.中的Row
个方法调用
本段使用*args
,但
第二个根本不适合上面*args
的原型.