封装
定义类
class Person:
定义属性(类属性):可以用类或对象调用
语法:类名.变量名=变量值
name = "张三"
构造方法:初始化方法
def __init__(self,age,gender):
#在初始化方法中给对象添加属性
self.age = age
self.gender = gender
定义方法
该默认的参数self指的是调用该函数的对象
def eat(self):
print("123")
# print(self)
实例化对象
person = Person
调用属性
print(person.name)
修改类属性的值
如果通过对象对属性进行重新赋值,实际上是给该对象又重新定义了一个属性名一样的变量
person.name = "李四" #该方法不能修改类属性的值
print(person.name)
print(Person.name)
Person.name = "李四"
print(person.name)
print(Person.name)
调用函数
person.eat()
添加对象属性
类外面添加:该属性只能被当前对象使用
person.age = 22
print(person.age)
类里面添加对象属性 语法: 变量名 = 变量值
该种方式添加的属性,属于所有类对象的
name = "张三"
在__init__()方法中添加对象属性 语法:self.属性名 = 值
用在__init__()初始化方法中
def __init__(self,age,gender):
#在初始化方法中给对象添加属性
self.age = age
self.gender = gender
私有属性和私有方法
设置私有属性和方法 在属性名和方法名前面加两个下划线__
定义为私有属性和私有方法,不能被子类继承
__cardPass = "123456"
获取和修改私有属性的值
获取 定义getXXX()
def getCardPass(self):
return self.__cardPass
修改 定义setXX()
def setCardPass(self,cardPass):
self.__cardPass = cardPass
方法
类方法
用装饰器@classmethod标识
@classmethod
def sleep(cls):
print("睡觉")
调用类方法
person.sleep()
Person.sleep()
添加属性
@classmethod
def sleep(cls):
print(f"{cls.name}睡觉")
静态方法
用装饰器@staticmethod标识
不能传参
@staticmethod
def play():
print("打豆豆")
调用静态方法
Person.play()
person.play()
魔法方法
XX()函数叫做魔法方法,指的是具有特殊功能的函数
init()
init():初始化对象
在创建一个对象时默认被调用,不需要手动调用
带参数的__init__()方法
类似Java语言中的构造方法
str()
print输出对象时,默认打印的是对象在内存中的地址
如果类中定义__str__方法,则会打印__str__方法中的内容
类似Java语言中的toString()方法
def __str__(self):
return f"{self.name},{self.age}"
print(person)
继承
单继承
父类
class 父类(object):
在Python中,所有类默认继承object类
class Father(object):
money = 2222.22
def cook(self):
print("做饭")
子类
class 子类(父类):
class Son(Father):
pass
son = Son()
print(son.money)
son.cook()
多继承
子类
class 子类(父类1,父类2)
如果一个类继承多个父类,优先继承父类1的同名属性和方法
class Son(Father,Mother):
pass
父类
class Father(object):
money = 2222.22
def hair(self):
print("头发")
def eat(self):
print("吃")
class Mother(object):
money = 8888.88
def eye(self):
print("眼睛")
def play(self):
print("玩")
调用
son = Son()
print(son.money)
son.hair()
son.play()
查看一个类的继承关系
类.mro
子类重写父类的同名属性和方法
如果子类重写了父类的同名属性和方法,则会调用子类中的同名属性和方法
print(Son.__mro__)
子类调用父类的同名属性和方法
在子类的同名方法中调用语法
父类类名.方法(self)
super()
调用父类方法
super().方法()
适用于 单继承
父类
class Father(object):
money = 2222.22
def play(self):
print("玩游戏")
子类
class Son(Father,Mother):
money = 22.22
def play(self):
print("玩手机游戏")
调用
son = Son()
print(son.money)
son.play()
调用父类的方法
def play(self):
Father.play(self)
print("玩手机游戏")
多态
概念:多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行效果
步骤
定义父类,提供父类方法
class Water(object):
def use(self):
pass
定义子类,重写父类方法
class Gas(Water):
def use(self):
print("这是气体的水")
class Liquid(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()
person.cook(gas)
person = Person()
liquid = Liquid()
person.cook(liquid)
person = Person()
solid = Solid()
person.cook(solid)