1.self
self在init()构造函数中是必须存在的, 有点像C++中的this,是一个默认的对象(和类的实例是一个意思),但Python中必须写出,C++中一般不写出
2.内置函数
①__init__()函数:可以当做C++ 中的构造函数来理解,只是多了self,在初始化对象的时候,会自动调用init()函数。
②__str__()函数:str是被print函数调用的,就是我们实例化对象a后,用print(a),就会输出a对应类内__str()__函数return的字符串。
③自定义对象的比较
__eq__重定义等于,__lt__重定义小于,__gt__大于,__le__小于等于,__ge__大于等于
def __eq__(self,other):
return self.x==other.x and self.y==other.y
④重载运算
__add__(self,other) #可以实现类的相加
__sub__(self,other) #减法
__mul__(self,other) #乘法
__mod__(self,other) #除法
#加法的示例
class A:
def __add__(self,other): #other表示其他的类
c = self.a+other.a
return c
⑤__call__:
call()方法是Python中一个很特殊的方法。凡是可调用对象,都可以通过调用__call__()方法来调用该对象。如果类中定义了__call__()方法,那么该类的实例对象也将成为可调用对象。该对象被调用时,将执行__call__()方法中的代码。
call方法可以通过实例化对象来直接调用,调用方法就是实例化对象名字后加一个括号()
3.继承和派生
class 类名(基类名1,基类名2,...):
...
#继承方法1:类名.__init__(self,待传参数)
class Teacher(People):
def __init__(self, name, sex, age, title):
People.__init__(self, name, age, sex)
self.title = title
def teach(self):
print('%s is teaching' %self.name)
#继承方法2:super().__init__(self,待传参数)
class Teacher(People):
def __init__(self, name, sex, age, title):
super().__init__(name, age, sex) #调用的是绑定方法,自动传入self
self.title = title
def teach(self):
print('%s is teaching' %self.name)
#注意:在python2中super 的使用需要完整地写成super(自己的类名,self),而在python3中可以简写为super()。
1.super().__init__相对于类名.__init__,在单继承上用法基本无差
2.但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次,具体看前面的输出结果
3.多继承时,使用super方法,对父类的传参数,应该是由于python中super的算法导致的原因,必须把参数全部传递,否则会报错
4.单继承时,使用super方法,则不能全部传递,只能传父类方法所需的参数,否则会报错
5.多继承时,相对于使用类名.__init__方法,要把每个父类全部写一遍, 而使用super方法,只需写一句话便执行了全部父类的方法,这也是为何多继承需要全部传参的一个原因



