了解 Python 中的对象类型

Understanding type of object in Python

本文关键字:对象 类型 Python 了解      更新时间:2023-10-16

我一直用C++编程,现在我正在学习Python。 我发现在 Python 中没有对象声明非常令人困惑,尤其是类成员在定义之前没有声明的事实。

例如,在C++我会写:

Class ComplexNumber {
protected:
int _re,_im;
public:
...
}

在 Python 中,_re 和 _im 的声明将丢失,它们的初始化将隐藏在公共成员的定义中。当你幸运的时候,你可以在构造函数中找到它们,但有时它们在其他成员中被初始化。

有没有办法在不阅读整个代码的情况下弄清楚 Python 中类的完整结构?特别是我对类中包含的"变量"(及其类型(的完整列表感兴趣,这些变量C++通常是受保护/私有成员。

提前谢谢你。

Python是一种动态语言。变量没有类型,变量保存对对象的引用。只有对象才有类型。因此,在运行时之前,无法知道变量包含哪种类型。Python 开发人员应该通过良好的清晰文档来解释预期的类型是什么,从而解决此问题。

在运行时,我们可以看到 python 对象(实例,而不是类(的每个属性(也称为成员(的类型是什么:

def types_of_instance_attributes(instance):
return {k: type(v) for k, v in vars(instance).items()}

然而,在python 3.6+中,静态类型提示已经成为帮助用户记录和允许静态类型检查器更好地工作的语言的一部分。这些看起来更类似于C++:

class ComplexNumber:
_re: int
_im: int
def __init__(self, real: int, imaginary: int) -> None:
self._re = real
self._im = imaginary
def magnitude(self) -> float:
return (self._re**2 + self._im**2)**0.5

com = ComplexNumber(12, -3)
x = com._re  # type checker knows is an int
y = com.magnitude()  # type checker knows is a float
z: str = com._im  # ERROR in type checker (int -> str mismatch)