秋招结束,期间一直采用java刷题,python的熟练程度下降,因此决定重新捡回python。
一、类的定义
1 classPerson:2 def __init__(self, xName, xAge):3 self.name =xName4 self.age =xAge5 #能否重载
6 defprintPeson1(self,tmp):7 print("My name is {}, My age is {} and sex is {}".format(self.name,self.age,tmp))8 defprintPeson2(self):9 print("My name is {}, My age is {}".format(self.name,self.age))10
11 #实例化类
12 person = Person("lily",22)13 #调用类成员函数,有参,无参
14 person.printPeson1("felman")15 person.printPeson2()16
总结:
1.class小写,类名Person首字母大写
2.无花括号{},用冒号:
3.实例化时无new,直接类名(),Person()。括号中的参数与初始化函数__init__()中传入的一致
二、初始化函数__init__()与self
参考了 https://www.cnblogs.com/ant-colonies/p/6718388.html
__init__(): 为类的初始化函数,在java中类名(),Person(){}为初始化函数。在实例化对象时,会调用初始化函数,传入参数。所以是实例化时,传入的参数与初始化函数的参数一致。
public classPerson{
String name;intage;//初始化函数
Person(String xName, intxAge){//name = xName;//age = xAge;//也可以写成:
this.name =xName;this.age =xAge;
}
}
python类中的self与Java类中的this是类似的,代表该类当前对象。
在类的代码(函数)中,需要访问当前的实例中的变量和函数的,即,访问Instance中的:
对应的变量(属性,property):Instance.ProperyNam,去读取之前的值和写入新的值
调用对应函数(function):Instance.function(),即执行对应的动作
-> 而需要访问实例的变量和调用实例的函数,当然需要对应的实例Instance对象本身
-> 而Python中就规定好了,成员函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self
-> 所以,我们需要self(需要用到self)
而如果没有用到self,即代码中,去掉self后,那种写法所使用到的变量,实际上不是你所希望的,不是真正的实例中的变量和函数,而是的访问到了其他部分的变量和函数了。甚至会由于没有合适的初始化实例变量,而导致后续无法访问的错误。