什么是对象
对象属性和方法的引用
<对象名>.<属性名>可以用在赋值语句和表达式中
如“abc”.upper()、(1+2j).real
对象的属性和方法可以随时增加和删除
类的定义和类的调用
1、类封装了对应现实实体的性质和行为,实例对象式是类的具体化
封装、继承、多态
2、类名和函数调用相同:类名用大写字母开头,函数用小写字母开头
3、class语句
class <类名>:
<一系列方法的调用>
4、类的初始化
class <类名>:
def_init_(self,<参数表>):
def <方法名>(self,<参数表>):
init()是一个特殊的函数名,用于根据类的定义创建实例对象,第一个参数必须为self
5、调用类
<类名>(<参数>)
调用类会创建一个对象: obj = <类名>(<参数表>),返回一个对象实例,类方法中的self指这个对象实例
使用点(.)操作符来调用对象里的方法
t = turtle.Pen()
类定义中的特殊方法
特殊方法(魔术方法):使用内置操作,所有特殊方法的名称以一对下划线_开始和结束
1、构造与解构
对象构造器,实例化对象时调用
init(self,[…)
析构器,销毁对象时调用
del(self,[…)
2、算术运算
算术操作符
add(self,other): +
sub(self,other): -
mul(self,other): *
div(self,other): /
反运算
当左操作数不支持相应的操作时被调用
radd(self,other)
大小比较
eq(self,other): ==
ne(self,other): !=
lt(self,other): < 与sort()和sorted()
gt(self,other): >
le(self,other): <=
3、其他特殊方法
str(self):自动转换为字符串
reper(self):返回一个用来表示对象的字符串
len(self):返回元素个数
面向对象类的继承
继承方式
class <子类名>(<父类名>):
def <重定义方法>(self,…):
若子类中存在一个重新定义的方法名和父类中一个方法一样,即Override覆盖父类方法
子类天机父类没有的方法和属性
class GasCar(Car):
def init(self,name,capacity)
super()._init #因父类init被覆盖了super()表示返回一个父类
self.capacity = capacity
self
类定义中,所有方法的首个参数一般都是self,作用:在类内部,实例化过程中传入的所有数据都赋给这个变量
<对象>.<方法>(<参数>)等价于<类>.<方法>(,<参数>)
实例:父类为Car,子类为GasCar和ElecCar
class Car:
def __init__(self,name):
self.name = name
self.remain_mile = 0
def fill_fuel(self,miles): #加燃料里程,能跑多少英里
self.remain_mile = miles
def run(self,miles): #需要跑miles英里
print(self.name, end = ':' )
if self.remain_mile >=miles:
self.remain_mile -= miles
print("run %d miles!" %(miles,))
else:
print("fuel out!")
class GasCar(Car):
def fill_fuel(self,gas): #加汽油gas升
self.remain_mile = gas * 6.0 #每升跑6英里
class ElecCar(Car):
def fill_fuel(self,power): #充电power度
self.remain_mile = power * 3.0 #每度电跑3英里
gcar = GasCar("BMW")
gcar.fill_fuel(50.0)
gcar.run(200.0)
ecar = ElecCar("Tesla")
ecar.fill_fuel(60.0)
ecar.run(200.0)