c++ 定义两个构造函数_Python构造函数(二十二)

2aee19cd1262d3a17fa863960ad52b13.png

构造函数是一种特殊类型的方法(函数),它在类的实例化对象时被调用。 构造函数通常用于初始化(赋值)给实例变量。 构造函数还验证有足够的资源来使对象执行任何启动任务。

创建一个构造函数

构造函数是以双下划线(__)开头的类函数。构造函数的名称是__init__()。

创建对象时,如果需要,构造函数可以接受参数。当创建没有构造函数的类时,Python会自动创建一个不执行任何操作的默认构造函数。

每个类必须有一个构造函数,即使它只依赖于默认构造函数。

举一个例子:

创建一个名为ComplexNumber的类,它有两个函数__init__()函数来初始化变量,并且有一个getData()方法用来显示数字。

看这个例子:

#!/usr/bin/python3#coding=utf-8class ComplexNumber: def __init__(self, r = 0, i = 0): """"初始化方法""" self.real = r  self.imag = i  def getData(self): print("{0}+{1}j".format(self.real, self.imag))if __name__ == '__main__': c = ComplexNumber(5, 6) c.getData()

执行上面代码,得到以下结果 -

5+6j

可以为对象创建一个新属性,并在定义值时进行读取。但是不能为已创建的对象创建属性。

看这个例子:

#!/usr/bin/python3#coding=utf-8class ComplexNumber: def __init__(self, r = 0, i = 0): """"初始化方法""" self.real = r  self.imag = i  def getData(self): print("{0}+{1}j".format(self.real, self.imag))if __name__ == '__main__': c = ComplexNumber(5, 6) c.getData() c2 = ComplexNumber(10, 20) # 试着赋值给一个未定义的属性 c2.attr = 120 print("c2 = > 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Python调用C++代码时,可以通过ctypes模块来调用C++构造函数和重载函数。以下是一个示例: 假设有一个名为`example.cpp`的C++文件,其中包含一个`Person`类,具有构造函数和一个重载的`greet()`函数: ```cpp #include <iostream> #include <string> class Person { public: Person(const std::string& name) : name_(name) {} void greet() { std::cout << "Hello, my name is " << name_ << std::endl; } void greet(const std::string& otherName) { std::cout << "Hello, " << otherName << "! My name is " << name_ << std::endl; } private: std::string name_; }; ``` 首先,将C++代码编译为共享库(例如`example.so`)。 接下来,在Python中使用ctypes模块加载共享库,并测试构造函数和重载函数: ```python import ctypes # 加载共享库 lib = ctypes.CDLL('./example.so') # 根据实际的共享库路径进行修改 # 定义Person类 class Person: def __init__(self, name): # 调用C++构造函数 lib.Person_new.argtypes = [ctypes.c_char_p] lib.Person_new.restype = ctypes.c_void_p self.obj = lib.Person_new(name.encode()) def greet(self, otherName=None): if otherName is None: # 调用C++的greet()函数 lib.Person_greet.argtypes = [ctypes.c_void_p] lib.Person_greet.restype = None lib.Person_greet(self.obj) else: # 调用C++的greet(const std::string& otherName)函数 lib.Person_greet_with_name.argtypes = [ctypes.c_void_p, ctypes.c_char_p] lib.Person_greet_with_name.restype = None lib.Person_greet_with_name(self.obj, otherName.encode()) # 创建Person对象并调用函数 p1 = Person("Alice") p1.greet() # 输出:Hello, my name is Alice p1.greet("Bob") # 输出:Hello, Bob! My name is Alice ``` 在上述示例中,我们使用`ctypes`定义Python中的`Person`类,并通过调用C++构造函数和重载函数来创建对象和调用函数。 请注意,你需要根据实际的共享库路径进行修改。此外,确保C++代码在编译为共享库之前已经正确编写和编译。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值