一、面向对象思想
1、三大特征:继承、封装、多态
封装:对一系列相同 特征和行为的事物的统称。而表现形式上将事物定义成类,也就是指类的属性和方法 的封装。
继承:对于封装的扩充,新的类具有现有类别的特征和行为,也能具有自己的行为和特征。现有的类叫父类,新类为子类。
多态: 子类别虽然有父类别的相同的方法,但是表现形式不同。
二、类和对象
2.1方法
面向过程写的代码称为函数,将函数写到类里面称为类的方法。
class Chicken():
def tezheng(self):
weight="15kg"
price="15"
#定义一个对象
chicken1=Chicken()
#对象调用实例属性
chicken1.tezheng
三、魔法方法
带有"_ _方法名 _ _“风格的函数和对象称为魔法方法。
3.1 _ _ init _ _ 表示初始化方法
class Chicken():
def __init__(self):
self.weight="15kg"
self.price=15
chicken1=Chicken()
chicken1.weight="3.5"
3.2 _ _ str_ _ 表示为输出时显示的是内容而不是地址
class Chicken():
def __init__(self,weight,price):
self.weight=weight
self.price=price
def __str__(self):
return "这是什么"
chicken1=Chicken(20,30)
print(chicken1)
输出:
这是什么
### 3.3 _ _ del_ _() 表示删除时自动调用
四、继承
单一继承
使用object方法继承,不使用object继承则需要是指明继承的父类。
#父类也称公共基
class Chicken(object):
def __init__(self,name):
self.name=name
def __str__(self):
return f"这是{ self.name}"
#子类
class Chicken1(Chicken):
pass
chicken1=Chicken1("开心")
print(chicken1)
4.2多继承
class Chicken(object):
def __init__(self,name):
self.name=name
def __str__(self):
return f"这是{ self.name}"
class Chicken1(object):
def eat(self):
return "这是Chicken1的方法"
class Cock(Chicken,Chicken1):
pass
chicken1=Cock("开心")
print(Chicken1.eat)
print(chicken1)
4.3 ⼦类重写⽗类同名⽅法和属性
⼦类和⽗类具有同名属性和⽅法,默认使⽤⼦类的同名属性和⽅法。
4.4 ⼦类调⽤⽗类的同名⽅法和属性
class Chicken(object):
def __init__(self):
self.name="这是Chicken的方法"
def eat(self):
return f"这是{self.name}"
class Chicken1(object):
def __init__(self):
self.name="这是Chicken1的方法"
def eat(self):
return f"这是{self.name}"
class Cock(Chicken,Chicken1):
def __init__(self):
self.name="这是Coc的方法"
def eat(self):
self.__init__() ## 如果是先调⽤了⽗类的属性和⽅法,⽗类属性会覆盖⼦类属性,故在调⽤属性前,先调⽤
#⾃⼰⼦类的初始化
return f"这是{self.name}"
def chicken_master(self):
# 调⽤⽗类⽅法,但是为保证调⽤到的也是⽗类的属性,必须在调⽤⽅法前调⽤⽗类的初始化
Chicken.__init__(self)
Chicken.eat(self)
chicken1=Cock()
print(chicken1.eat)
print(chicken1.name)
print(chicken1.chicken_master)