学习背景:c与c++语言基础
主要想记录一下,python语言里面区分与c/c++的一些不同点 (应该会持续更新)
1.python 的魔法方法(找本书一看或者百度,一目了然)
2.类的区别
(1)特殊的构造函数与析构函数(找本书一看或者百度,一目了然)
(2)python类声明中的self
在python中虽然可以灵活的定义任何变量,但是在类的声明中加入了self关键字,用以在很多场合进行区别,因此一些c++的有些语法则行不通了。
self一是区分类中与类外的函数或变量,二是区分类中的成员函数与成员变量(等等)总之:self代表当前对象的地址
class test
{
public:
int name = 100;
void showname()
{
int name = 200;
printf("%d",name);
}
};
int main() {
std::cout << "Hello, World!" << std::endl;
test T;
T.showname();
printf("\n%d",T.name);
return 0;
}
这段c++函数,如果把int name = 200;注释掉再运行showname也不会有任何问题。这说明,编译器会自动区分函数内部的name与函数外、类里面的name,优先选择函数内部name。并且不会覆盖掉函数外的name。
# class test :
# name = 100;
# def showname(self):
# print("%d"%name)
#
# if __name__ == '__main__':
# a = test()
# a.showname()
class test :
name = 100;
def showname(self):
print("%d"%self.name)
if __name__ == '__main__':
a = test()
a.showname()
这段python代码,上面的运行会报错,而下面的没有问题,python不会自动取访问成员变量name。
Q : 为什么pyhon方法里面(我喜欢叫函数,一个意思)第一个变量总是self?
A: 看c++中有一章提到,成员函数是多个对象共用,而成员变量则独自分开,这样避免了存储空间的浪费。这个原理在哪种语言都适用,当各个对象共用函数时,当然需要一个输入变量来区分不同的对象,因此就有了self,代表着对象的地址。所以在函数第一个变量用self(命名可以随便)是符合逻辑的,只不过感觉上会有点多余。
(因为习惯了编译器代做一些工作,编写起来觉得有些别扭,就深究了一下。或许这就是解释性语言的一些不同)