Python面向对象


一、对面向对象的理解

面向对象(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)
del haier1                

你可能感兴趣的:(java,开发语言)