一、封装
1、类和对象
创建类语法
class Person:
# 定义属性
name ="张三"
实例化对象语法
person = Person()
调用类属性和方法语法
# person.name="李四"
# print(person.name)
2、self:指的是调用该函数的对象
函数中默认参数self:该默认的参数指的是调用该函数的对象
3、类属性
可以通过类名或者对象进行访问,写在类里面
class Person:
# 定义属性[类属性] 可以用类或者对象调用
name ="张三"
修改类属性
类属性的修改,只能通过类修改,不能通过对象修改
ps:如果通过对象对属性进行重新赋值,实际上是给该对象又重新定义了一个属性名一样的变量
# person.name="李四" #注意:该种方式不能修改属性的值
# Person.name="李四"
# print(person.name)
# print(Person.name)
4、添加对象属性
类外面添加属性
ps:该中方式添加的属性,只能属于该对象的
person.age=12
类里面添加属性
该种方法添加的属性,属于所有类对象的
class Person:
# 定义属性[类属性] 可以用类或者对象调用
name ="张三"
init()方法中添加对象属性
def __init__(self, age, gender):
# 在初始化方法中给对象添加属性
self.age = age
self.gender = genter
person = Person(11,"那")
pserson2=Person(22,"女")
print(person.age)
print(pserson2.age)
结果:
5、获取对象属性
类外面获取对象属性
person.eat()
类里面获取对象属性
def __init__(self, age, gender):
# 在初始化方法中给对象添加属性
self.age = age
self.gender = gender
person.eat()
结果:
6、私有属性和私有方法
设置私有属性和方法
在属性名和方法名前面加两个下划线
定义为私有属性和私有方法,不能被子类继承
__cardPass = "121211"
print(person.cardPass)
print(person2.cardPass)
此时运行出来会报错,因为不能调用
获取和修改私有属性的值
给私有属性提供set和get方法
def setCardPass(self,cardPass):
self.__cardPass=cardPass
def getCardPass(self):
return self.__cardPass
7、方法
类方法
@classmethod
def sleep(cls):
print(f"{cls.name}睡觉觉")
Person.sleep()
静态方法
# 静态方法
@staticmethod
def play():
print("打豆豆")
person.play()
8、魔法方法
init()
上面有用到
str()
def__str__(self):
return f"{self.name},{self.age},{self.genter}"
print输出对象时,默认打印的是对象在内存中的地址
如果类中定义__str__方法,则会打印__str__方法中的内容
二、继承
1、单继承
class Father(object):
money =1433.22
class Son(Father):
pass
son = Son()
print(son.money)
def cook(self):
print("玩游戏")
son.cook()
2、多继承
class Father(object):
money =1433.22
def cook(self):
print("玩游戏")
def eat(self):
print("干饭")
class Mother(object):
money =4433.12
def cook(self):
print("买衣服")
def look(self):
print("追剧")
class Son(Mother,Father):
pass
son = Son()
print(son.money)
son.cook()
son.cook()
son.look()
ps:如果一个子类继承多个父类,优先继承父类1同名的属性和方法
查看类的继承关系
print(Son.__mro__)
在子类重写父类的同名属性和方法
在子类的同名方法中调用方法
class Son(Mother,Father):
money =123.45
def cook(self):
# 调用父类的cook方法
# 1
Father.cook(self)
Mother.cook(self)
print("煮泡面")
son = Son()
print(son.money)
son.cook()
调用父类方法 super().方法()
def cook(self):
# 02
super().cook()
print("煮泡面")
son = Son()
print(son.money)
son.cook()
三、多态
1、概念:
多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行效果
2、案例
class Water(object):
def use(self):
pass
class Gas(Water):
def use(self):
print("这是气体")
class Linquid(Water):
def use(self):
print("这是液体")
class Solid(Water):
def use(self):
print("这是固体")
class Person(object):
def cook(self,water):
water.use()
person=Person()
gas = Gas()
linquid=Linquid()
solid=Solid
person.cook(linquid)