网站推广工具工作室,用家用电脑建设网站,快速网站模板公司,wordpress 个人发布功能C中的this指针和Python中的Self 1. python中的Self2. C中的this指针3. C中的this指针和Python中self的异同点#xff1a; 以朋友的新岁祝福开篇#xff0c;祝笔者也祝大家☺️#xff1a; 一岁一礼 一寸欢喜且喜且乐 且以永日 From VardoZ癸卯年十一月廿六(兔年)之… C中的this指针和Python中的Self 1. python中的Self2. C中的this指针3. C中的this指针和Python中self的异同点 以朋友的新岁祝福开篇祝笔者也祝大家☺️ 一岁一礼 一寸欢喜且喜且乐 且以永日 From VardoZ癸卯年十一月廿六(兔年)之前一直对 C 中的 this 和 python 中的 self 到底是什么关系为什么 C 要显式的写出来python 则不需要 模糊不清趁着周末整理一下相关结论希望本篇文章可以解答这些问题同时对C和Python中的类加深些理解。
1. python中的Self
python 当对象调用类中的函数的时候系统会自动把当前对象传入函数作为函数的第一个参数self当前对象 self不过可以用其他 token 代替 self。因此在定义的时候需要声明 self 这个形参调用时却不需要手动传入对象系统会自动传入。
class A:def test(x):print(x)# x 接收 12 这个参数
A.test(12)
a A()
# x 接收 a 这个对象
a.test()class A:def test(mine, x):print(x)# mine 接收 1x 接收 12
A.test(1, 12)
a A()
# mine 接收 ax 接收 12
a.test(12)2. C中的this指针
在C中每一个对象都能通过this指针来访问自己的地址。this指针是所有成员函数的隐含参数。因此在成员函数内部它可以用来指向调用对象this-变量。
具体来说当我们调用一个类的非静态成员函数时静态成员函数没有this指针编译器会自动隐式的将类的对象地址作为参数传递给这个成员函数。在成员函数体内部这个对象地址就是this指针所指向的地址这样就能通过this指针来访问对象本身及其成员。
总结一下this指针有以下特点
this指针在非静态成员函数内部使用用来指向调用对象。this指针只能在成员函数内部使用而不能在全局函数或者静态函数中使用。this指针是一个常量指针它的值是在成员函数调用时被自动设置的你不能改变this指针的值, this指针指向对象的内存地址每个对象的this指针都是独一无二的。
3. C中的this指针和Python中self的异同点
在很多方面C中的this指针和Python中的self参数是类似的。它们都是类实例方法的隐含参数都可以用来访问实例的属性和方法。但是还是有一些关键的 区别 语法在C中this是一个隐含的指针不需要在成员函数的参数列表中显式声明。在Python中self是显式的需要在每个实例方法的参数列表中声明。 可选性在C中你可以选择不使用this指针直接访问实例的属性和方法。但在Python中必须使用self参数来访问实例的属性和方法。 可修改性在C中this是一个const指针你不能修改this指针的值。但在Python中self是一个普通的变量你可以修改self的值虽然这通常不是一个好主意。 静态方法在C的静态方法中没有this指针。但在Python的静态方法中依然可以有self参数尽管在调用静态方法时不需要为self参数提供值。 用法在C中this是一个指针所以访问实例的属性和方法时需要使用箭头运算符-。而在Python中self是一个对象引用所以访问实例的属性和方法时使用点运算符.。 C中this指针不可省略的情形 当局部变量的名称和成员变量的名称相同时必须使用this指针来区分。例如 class MyClass {
private:int x;
public:void setX(int x) {this-x x; // 这里的this-x是成员变量x是局部变量}
};当在类的成员函数中需要返回对象本身的引用可以使用*this来返回。例如 class MyClass {
private:int x;
public:MyClass setX(int x) {this-x x; return *this; // 返回对象本身的引用}
};在实现链式调用时需要使用this指针。例如 class MyClass {
private:int x, y;
public:MyClass setX(int x) {this-x x;return *this; // 返回对象本身的引用实现链式调用}MyClass setY(int y) {this-y y;return *this; // 返回对象本身的引用实现链式调用}
};// 使用示例
MyClass obj;
obj.setX(10).setY(20);