Python之面向对象(封装,继承,多态)

本文详细介绍了Python中的面向对象编程,包括封装的概念,如类和对象、self的使用、类属性与对象属性的管理,以及私有属性和方法的设定。接着,讲解了继承,包括单继承、多继承以及如何查看和重写继承关系。最后,讨论了多态的原理和应用场景,展示了如何通过多态实现不同的执行效果。
摘要由CSDN通过智能技术生成

一、封装

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)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值