了解 Python 中的对象类型
Understanding type of object in Python
我一直用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)
相关文章:
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- 了解 Python 中的对象类型
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 调用的对象类型 'double' 不是 report() 函数的函数或函数指针
- 基准、值、值类型、对象和对象类型(C++)
- JNI 如何将 Java 对象数组传递给相同对象类型的 C++ 数组
- 在构造过程中更改的对象类型
- 如何构建程序以避免查询对象类型?
- 如何使用Dynamic_cast获得对象类型
- 什么更有效率?在重载函数中或通过在基类函数中检查对象类型来实现
- static_cast实际上不是对象类型的类型是未定义的行为吗?
- 为什么 std::variant 不能容纳数组对象类型,而联合可以?
- 为什么类型转换对象不会更改其地址?有关对象类型的信息存储在哪里?
- 类返回对象类型,但如何返回和检查 null
- 是否可以在辅助功能中概括对象类型
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 当将对象传递给具有参数作为引用类型的函数以及当其类对象类型时,会得到不同的输出
- 如何在运行时指定对象类型
- 我可以获取在重载的新运算符中使用新运算符的对象类型吗?