我一直使用C ++进行编程,现在我正在学习Python。 我发现在Python中缺少对象声明非常令人困惑,尤其是在定义类之前没有声明类成员这一事实。
例如,在C ++中,我会写:
Class ComplexNumber {
protected:
int _re,_im;
public:
...
}
在Python中,将缺少_re和_im的声明,并且它们的初始化将隐藏在公共成员的定义中。幸运的话,您可以在构造函数中找到它们,但是有时它们会在其他成员中初始化。
是否有任何方法可以在不读取整个代码的情况下找出Python中类的完整结构?特别是,我对类中包含的“变量”(及其类型)的完整列表感兴趣,在C ++中,这些变量通常是受保护的/私有成员。
谢谢。
答案 0 :(得分:0)
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)