从c++的角度看,Python中的重载构造函数

Overloaded constructor in Python from C++ perspective

本文关键字:Python 重载 构造函数 c++      更新时间:2023-10-16

有这样的代码:

#include <iostream>
class SomeClass
{
  int someInteger;
  float someFloat;
public:
  SomeClass(int someInteger_)
  {
    // do something for int
    std::cout << "Int constructorn";
  }
  SomeClass(float someFloat_)
  {
    // do something for float
    std::cout << "Float constructorn";
  }
};
int main()
{
  SomeClass a(2);
  SomeClass b(2.0f);
  return 0;
}
当传递构造函数的float或int参数时,创建someeclass类的对象是不同的。Python中也有类似的类:
class SomeClass:
    someInteger = 0
    someFloat = 0.0
    def __init__(self, value):
        # I want to do different things when int or float is passed
        print value
a = SomeClass(2)
b = SomeClass(2.0)

一般的问题是-如何使函数行为依赖于类型传递的参数?

使用isinstance:

>>> isinstance(1, int)
True
>>> isinstance(1, float)
False
>>> isinstance(1.1, float)
True
>>> isinstance(1.1, int)
False

或者构造函数:

def __init__(self, value):
    if isinstance(value, int):
        # int constructor
    elif isinstance(value, float):
        # float constructor
    else:
        raise TypeError, 'Unexpected type'