python面向对象(封装、继承、多态)

面向对象

封装

定义类

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)

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一门面向对象的编程语言,它支持封装继承多态封装是指将数据和行为封装在一个类,对外部隐藏实现细节,只保留接口。Python通过使用双下划线“__”来实现类的私有属性和方法继承是指一个子类可以继承父类的属性和方法,并且可以自己添加新的属性和方法Python使用类名后面的括号指定父类,子类会自动继承父类的所有属性和方法多态是指同一个方法不同的子类具有不同的实现方式。Python多态是通过方法重写(覆盖)实现的。子类可以重写父类的方法,并且可以在子类调用父类的同名方法。 下面是一个简单的Python类的示例,展示了封装继承多态的用法: ```python # 定义一个Animal类 class Animal: def __init__(self, name): self.name = name def speak(self): pass # 定义一个Dog类,继承Animal类 class Dog(Animal): def speak(self): return "Woof!" # 定义一个Cat类,继承Animal类 class Cat(Animal): def speak(self): return "Meow!" # 创建一个Dog对象和一个Cat对象 dog = Dog("Rufus") cat = Cat("Fluffy") # 调用它们的speak()方法输出不同的结果 print(dog.speak()) # 输出:Woof! print(cat.speak()) # 输出:Meow! ``` 在这个示例,Animal类封装了一个名称属性和一个空的speak()方法,子类Dog和Cat继承了Animal类,并重写了speak()方法以实现多态。最后创建了一个Dog对象和一个Cat对象,分别调用它们的speak()方法输出不同的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值