一、对面向对象的理解
面向对象(OOP)是一种编程范式,它专注于创建包含数据和方法的对象。Python是一种面向对象的语言,这意味着它支持封装,继承和多态等OOP概念。面向对象的三大特性「封装」,「继承」和「多态」
二、封装、继承、多态
1、封装(Encapsulation)
封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。
class Foo:
def __init__(self, name, age ,gender):
self.name = name
self.age = age
self.gender = gender
def eat(self):
print "%s,%s岁,%s,吃奶" %(self.name, self.age, self.gender)
def he(self):
print "%s,%s岁,%s,喝水" %(self.name, self.age, self.gender)
def shui(self):
print "%s,%s岁,%s,睡觉" %(self.name, self.age, self.gender)
a = Foo('jack', 10, '男')
a.eat()
a.he()
a.shui()
b = Foo('rose', 11, '女')
b.eat()
b.he()
b.shui()
2、继承(Inheritance)
继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。
例如:
猫可以:喵喵叫、吃、喝、拉、撒
狗可以:汪汪叫、吃、喝、拉、撒
公共的部分就是 吃、喝、拉、撒
如下实现:
class Animal:
def eat(self):
print "%s 吃 " %self.name
def drink(self):
print "%s 喝 " %self.name
def shit(self):
print "%s 拉 " %self.name
def pee(self):
print "%s 撒 " %self.name
class Cat(Animal):
def __init__(self, name):
self.name = name
self.breed = '猫'
def cry(self):
print '喵喵叫'
class Dog(Animal):
def __init__(self, name):
self.name = name
self.breed = '狗'
def cry(self):
print '汪汪叫'
# ######### 执行 #########
c1 = Cat('猫one')
c1.eat()
c2 = Cat('猫two')
c2.drink()
d1 = Dog('狗one')
d1.eat()
3.什么是多态
多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等。(一个抽象类有多个子类,因而多态的概念依赖于继承)
import abc
class Animal(metaclass=abc.ABCMeta):#同一类事物:动物
@abc.abstractmethod
def talk(self):
pass
class Cat(Animal):#动物的形态之一:猫
def talk(self):
print('say miaomiao')
class Dog(Animal):#动物的形态之二:狗
def talk(self):
print('say wangwang')
class Pig(Animal):#动物的形态之三:猪
def talk(self):
print('say aoao')
三、魔法方法
在python中,_xx_()的函数叫做魔法方法,指的是具有特殊功能的函数
3.1 _init_()
作用:初始化对象
class Washer():
#定义_init_(),添加实例属性
def_init_(self):
#添加实例属性
self.width=500
self.height=800
def print_info(self):
#类里面调用实例属性
print(f'洗衣机的宽度是{self.width}')
print(f'洗衣机的高度是{self.height}')
haier1=Washer()
haier1.print_info()
注意:1、_init_()方法,在创建一个对象时默认被调用,不需要手动调用
2、_init_(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去
3.2 _str_()
当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了_str_()方法,那么就会打印从这个方法中return数据
class Washer():
def _init_(self,width,height):
self.width=width
self.height=height
def _str_(self):
return '海尔洗衣机说明书'
haier1=Washer(10,20)
#海尔洗衣机说明书
print(haier1)
3.3 _del_()
当删除对象时,python解释器也会默认调用_del_()方法
class Washer():
def _init_(self,width,height):
self.width=width
self.height=height
def _del_(self):
print(f'{self}对象已经删除')
haier1=Washer(10,20)