Python04 面向对象&继承&多态&补丁&模块

这篇博客介绍了Python中的面向对象编程概念,包括类的定义、构造方法、对象属性和方法的使用。接着,讨论了继承的概念,展示了如何创建子类并调用父类的方法。此外,还讲解了多态性,演示了如何通过对象的引用调用不同类的`skill`方法。最后,提到了模块的导入和使用,以及如何为已有类添加补丁方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 面向对象

'''
    特点:
        1.构造方法:需要重写 __init__方法
        2.对象属性:需要在 __init__ 方法中通过 self.属性名称 去定义
        3.获取对象的字符串信息: 需要重写 __str__ 方法
        4.定义对象的方法时:可以通过self.属性名去获取对应的属性名

'''
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.__secret = "这是一个秘密"

    # 相当于Java中的toString方法
    def __str__(self):
        return '\t'.join(["Person", self.name, str(self.age)])

    def skill(self):
        print(self.name + "能够直立行走...")

    def get(self):
        print(self.__secret)


person1 = Person("张三", 24)
print(person1, type(person1))
print(person1.age)
print(person1.name)
person1.skill()

person2 = Person("李四", 48)
person2.get()
# print(person2.__secret)  # 内部属性不能被外部对象访问
print(person2._Person__secret)  # 内部属性可以通过 _+类名+内部属性名进行访问

# 继承
'''
    特点:
        1.如果一个新的类继承了已有的一个类,那么被继承的类叫 父类,新的类叫做子类
        2.范围大的一般被用来做父类,具体的一般用来做子类
        3.子类可以调用父类中的方法及属性
        4.如果子类中的函数与父类重名,则调用子类方法

'''


class Teacher(Person):
    def __init__(self, t_name, t_age):
        # 如果需要构建父类对象,需要传入父类中所需的参数,并且super中需要传入子类名称及其self
        super(Teacher, self).__init__(name=t_name, age=t_age)
        self.teach = "computer"

    def skill(self):
        print("可以搞大数据...")


t = Teacher("杨老师", 30)
print(t.name)
t.skill()
t.get()


class Student(Person):
    def __init__(self, t_name, t_age):
        super(Student, self).__init__(name=t_name, age=t_age)
        self.teach = "王者"

    def skill(self):
        print("可以打王者荣耀...")


s = Student("王同学", 20)
s.skill()

'''

    多态:


    1.可以通过对象的引用调用其方法
    2.父类引用指向子类对象
    3.Python中并不注重是否继承及检查类型,只注重有没有方法及属性

'''

#定义run方法调用person类skill方法
def run(person):
    person.skill()


person3 = Person("王", 40)
run(person3)

teacher3 = Teacher("覃老师", 28)
run(teacher3)


# 鸭子类
class Duck:
    def skill(self):
        print("鸭子可以游泳...")


duck1 = Duck()
run(duck1) #duck类没有继承person类但duck类中有skill方法也可以用run方法调用


# 猴子补丁

class Dog:
    pass


# 创建一个函数
skill_functioni = lambda: print("是人是狗都在秀...")

dog1 = Dog()

# 将函数赋值给dog作为dog新增的补丁方法
dog1.skill = skill_functioni
dog1.skill()
 

# 模块

'''
    特点:
        1.导入模块时,会去执行模块中的代码块
        2.模块的两种导入方法1. import 包.模块        2. from 包 import 模块
        3.方法和模块导入方式一致 from 包.模块 import 方法名

        4.指定的方式是采用 import 模块 as 别名

        5.import 模块会自动调用模块内的方法,方法在if __name__ == '__main__':中必须手动调用
'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值