0
点赞
收藏
分享

微信扫一扫

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

捡历史的小木板 2022-03-25 阅读 45
python

# 面向对象

'''
    特点:
        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__':中必须手动调用
'''

举报

相关推荐

0 条评论