• python class类 与 对象


    1. 体验 类与对象

    # 先要创建类, 才能创建实例(对象)
    # 1. 创建 类  采用驼峰命名法
    class Washer():
        # self 指的是调用该函数的对象
        def wash(self):
            print('能洗衣服')
            print(self)
    
    # 2. 创建 实例(对象) 实例 = 类()
    haier = Washer()
    
    # 3. 验证是否成功 实例.函数名()
    haier.wash()
    
    print(haier)
    

    2. 一个类可以创建多个对象

    class Washer():
        def wash(self):
            print('洗衣服')
            print(self)
    
    # 一个类可以创建多个对象、 但实例对象的存储地址不同
    haier1 = Washer()
    haier1.wash()
    
    haier2 = Washer()
    haier2.wash()
    



    3. 类里面创建 多个函数

    class  Washer():
        def wash(self):
            print('洗衣服')
    
            print(self.height)
    
        # 可以创建 多个函数
        def print_num(self):
            print(self.width)
    
    haier = Washer()
    
    # 添加 属性
    haier.height = 600
    haier.width = 900
    
    # 执行 函数
    haier.wash()
    
    haier.print_num()
    

    4. 魔法方法__init__()

    class Washer():
        # 定义魔法方法
        def __init__(self):
            # 定义 实例对象的属性
            self.width = 500
            self.height = 800
    
        def print_info(self):
            print(f'宽度是{self.width}')
            print(f'高度是{self.height}')
    
    haier = Washer()
    
    # __init__() 默认调用,不需要手动调用
    # 属性值也不用手动传递
    haier.print_info()
    

    5. 带参数的__init__(self)

    class Washer():
        # 创建实例属性
        def __init__(self, width, height):
            self.width = width
            self.height = height
    
        def print_info(self):
            print(f'宽度是{self.width}')
    
            print(f'高度是{self.height}')
    
        # 1. 魔法方法 __str__(self) 解释说明
        def __str__(self):
            return '解释说明:  这个类的作用或者特点'
    
        # py 文件执行完会自动删除, 也就会调用 __del__(self) 方法
        def __del__(self):
            print('删除实例对象')
    
    # 带参数的 __init__(self)
    haier1 = Washer(30, 60)
    haier1.print_info()
    
    # 2. 魔法方法 __str__(self) 解释说明
    # 打印输出的是 return 后面的注释文件
    print(haier1)
    
    haier2 = Washer(100, 200)
    haier2.print_info()
    

    6. 继承

    # 定义一个父类
    class A(object):
        # 定义属性
        def __init__(self):
            self.num = 1
    
        # 定义方法
        def info_print(self):
            print(self.num)
    
    # 定义一个子类
    class B(A):
        # 防止报错
        pass
    
    # 验证方法
    result = B()
    
    # 调用 父类的方法
    result.info_print()  #  1
    
    

    7. 单继承

    # 创建 父类
    class Master(object):
        # 定义 属性
        def __init__(self):
            self.name = '[古法煎饼果子]'
        # 定义 方法
        def move_coke(self):
            print(f'调用{self.name}制作煎饼果子')
    
    # 创建 子类 单继承
    class Prentice(Master):
        pass
    
    # 创建实例对象
    dayou = Prentice()
    
    # 验证使用 实例对象的方法
    print(dayou.name)
    dayou.move_coke()
    

    8. 多继承

    # 创建 父类
    class Master(object):
        # 定义 属性
        def __init__(self):
            self.name = '[古法煎饼果子]'
        # 定义 方法
        def move_coke(self):
            print(f'调用{self.name}制作煎饼果子')
    
    class shool(object):
        # 定义 属性
        def __init__(self):
            self.name = '[黑马煎饼果子]'
    
        # 定义 方法
        def move_coke(self):
            print(f'调用{self.name}制作煎饼果子')
    
    # 创建 子类 继承   重点: 多继承 在继承时 会优先调用第一个继承类的同名属性和方法
    class Prentice(shool, Master):
        pass
    
    # 创建实例对象
    dayou = Prentice()
    
    # 验证使用 实例对象的方法
    print(dayou.name)
    dayou.move_coke()
    

    9. 子类和父类拥有同名属性和方法时

    # 创建 父类
    class Master(object):
        # 定义 属性
        def __init__(self):
            self.name = '[古法煎饼果子]'
        # 定义 方法
        def move_coke(self):
            print(f'调用{self.name}制作煎饼果子')
    
    class shool(object):
        # 定义 属性
        def __init__(self):
            self.name = '[黑马煎饼果子]'
    
        # 定义 方法
        def move_coke(self):
            print(f'调用{self.name}制作煎饼果子')
    
    # 创建 子类 继承   重点: 多继承 在继承时 会优先调用第一个继承类的同名属性和方法
    class Prentice(Master, shool):
        # 子类 和父类拥有同名属性和方法时,优先调用子类的属性和方法
        # 定义 属性
        def __init__(self):
            self.name = '[自创煎饼果子]'
    
        # 定义 方法
        def move_coke(self):
            print(f'调用{self.name}制作煎饼果子')
    
    # 创建实例对象
    dayou = Prentice()
    
    # 验证使用 实例对象的方法
    print(dayou.name)
    dayou.move_coke()
    
    
    # 2.  子类继承多个父类属性及方法时, 优先调用第一个父类的属性和方法
    # 3.  子类 和父类拥有同名属性和方法时,优先调用子类的属性和方法
    

    10. 实例对象__mro__ 查看继承顺序

    # 查看 类的 继承顺序
    print(B.__mro__)
    

    11. 子类调用自己的同名属性和方法 同时也可以调用父类的属性和方法

    # 创建 父类
    class Master(object):
        # 定义 属性
        def __init__(self):
            self.name = '[古法煎饼果子]'
        # 定义 方法
        def move_coke(self):
            print(f'调用{self.name}制作煎饼果子')
    
        def print_info(self):
            print('Master 父类的方法')
    
    class shool(object):
        # 定义 属性
        def __init__(self):
            self.name = '[黑马煎饼果子]'
    
        # 定义 方法
        def move_coke(self):
            print(f'调用{self.name}制作煎饼果子')
    
    # 创建 子类 继承   重点: 多继承 在继承时 会优先调用第一个继承类的同名属性和方法
    class Prentice(Master, shool):
        # 子类 和父类拥有同名属性和方法时,优先调用子类的属性和方法
        # 定义 属性
        def __init__(self):
            self.name = '[自创煎饼果子]'
    
        # 定义 方法
        def move_coke(self):
            # 先获取 自己的属性, 因为 获取父类的属性时会替换自己的属性
            self.__init__()
            print(f'调用{self.name}制作煎饼果子')
    
        # 调用 父类的属性和方法
        def make_Master_cook(self):
            # 先获取 属性  再调用方法
            Master.__init__(self)
            Master.move_coke(self)
    
        # 调用 父类的属性和方法
        def make_shool_cook(self):
            # 先获取 属性  再调用方法
            shool.__init__(self)
            shool.move_coke(self)
    
    
    
    # 创建实例对象
    dayou = Prentice()
    
    # 验证使用 实例对象的方法
    dayou.move_coke()
    
    # 调用父类的属性和方法
    dayou.make_Master_cook()
    dayou.make_shool_cook()
    
    # 调用 自己的属性 和方法
    dayou.move_coke()
    
    # 调用 Master 的父类的print_info()方法
    dayou.print_info()
    
    # 1.  同名属性方法使用起来有些繁琐,后续少用尽量不用
    # 2.  子类继承多个父类属性及方法时, 优先调用第一个父类的属性和方法
    # 3.  子类 和父类拥有同名属性和方法时,优先调用子类的属性和方法
    

    12. super() 使用 定义私有方法和属性

    # 定义 方法
        def move_coke(self):
            # 先获取 自己的属性, 因为 获取父类的属性时会替换自己的属性
            self.__init__()
            print(f'调用{self.name}制作煎饼果子')
            
            # 使用super()调用父类的属性和方法
            super().__init__()
            super().move_coke()
    
    
    # 定义私有方法和属性
    class Prentice(shool):
        # 子类 和父类拥有同名属性和方法时,优先调用子类的属性和方法
        # 定义 属性
        def __init__(self):
            self.name = '[自创煎饼果子]'
            # 设置成为私有属性,不传递给子类
            self.__money = 2000
        # 获取 私有属性
        def get__money(self):
            return self.__money
    
        # 设置 私有属性
        def set__money(self):
            self.__money = 500
        
        def __info_print(self):
            print('私有方法')
    

    13. 面向对象 多态性

    class Dog(object):
        def work(self):
            pass
    
    
    class ArmyDog(Dog):
        def work(self):
            print('追击敌人...')
    
    
    class DrugDog(Dog):
        def work(self):
            print('检查毒品...')
    
    
    class Prenson(object):
        def prenson_with_dog(self, dog):
            print('开始带警犬工作')
            dog.work()
    
    ad = ArmyDog()
    dd = DrugDog()
    
    daqiu = Prenson()
    
    daqiu.prenson_with_dog(ad)
    daqiu.prenson_with_dog(dd)
    

    14. 类方法 静态方法

    # 类方法
    class Dog(object):
        __tooth = 10
    
        # 创建 类方法 获取私有属性
        @classmethod
        def get_tooth(cls):
            return cls.__tooth
    
    wangcai = Dog()
    
    result = wangcai.get_tooth()
    
    print(result)
    
    # 静态方法
    class Dog(object):
    
        @staticmethod
        def info_print():
            print('这是静态方法')
    
    wangcai = Dog()
    
    # 实例对象 和 类 都可以调用类的方法
    wangcai.info_print()
    Dog.info_print()
    
  • 相关阅读:
    Windows关于文件句柄数的限制
    python 的未来5-10年的就业方向
    想着给要做的软件起一个名儿~
    sql server 特殊sql
    字节序之大小端_Intelx86是小端_网络传输是大端
    维基百科Wikipedia镜像网站列表
    NodeJS开启GZIP功能
    SqlServer2008 跨服务器同步数据
    Asp.net中的ViewState用法
    JAVA Netty入门Demo实例代码(自写测试可用)实现客户端服务器端互传数据
  • 原文地址:https://www.cnblogs.com/wuqxblog/p/16498294.html
Copyright © 2020-2023  润新知