Day18-继承与邮件发送

Day18-继承与邮件发送

  1. 继承

    1. 什么是继承

      • 继承就是让子类直接拥有父类的属性和方法
        子类 - 继承者
        父类 - 被继承者
    2. 继承的方法

      • class 类名(父类1, 父类2,…)
        pass

      • 定义类的时候如果没有写继承关系, 那么这个类默认继承python的基类: object

      • class 类名: == class 类名(object)

      • # 子类继承父类的属性和方法
        class Person:
            num = 61
        
            def __init__(self):
                self.name = 'hh'
                self.age = '12'
                self.gender = '男'
        
            def func1(self):
                print(f'{self.name}今年{self.age}岁')
        
            @classmethod
            def func2(cls):
                print(f'人类的数量:',{cls.num})
        
            @staticmethod
            def func3():
                print('人类破坏环境')
        
        class Student(Person):
            pass
        
        
        print(Student.num)
        
    3. 子类中添加属性和方法

      • 添加类属性、方法
        • 直接在子类中添加新的类属性和新的方法
      • 添加对象属性
        • 在子类的__init__方法中添加新的对象属性, 同时使用super()去调用父类的__init__
      • super的用法:
        • super(类, 对象).方法() - 调用指定类的父类的指定方法
    4. 类中的方法的调用

      • 在通过类或者对象调用方法时, 先在当前类搜索, 如果不存在再去父类搜索…以此类推, 如果找到基类都没找到, 程序才会报错
      class A:
          x = 10
      
          def __init__(self):
              self.aa = 10
              self.bb = 20
      
      
          def func1(self):
              print('A中的对象方法')
      
      
      class B(A):
          y = 'abc'
      
          def __init__(self):
              super().__init__()         # 调用当前类的父类的__init__方法
              self.study_id = '001'
              self.school = '千峰'
      
          def func2(self):
              print('B中的对象方法')
      
      
          @classmethod
          def func3(cls):
              print('B中的类方法')
      
      
      print('=========================')
      
      a = A()
      b = B()
      b.func1()
      b.func2()
      B.func3()
      
      # print(b.school, b.study_id)
      
      print(a.aa, a.bb)
      print(b.aa, b.bb )
      
  2. 多继承

    class Animal:
        num = 100
    
        def __init__(self):
            self.gender = '雌'
            self.age = 1
    
        def func1(self):
            print('动物的对象方法')
    
    
    class Fly:
        name = '飞行器'
    
        def __init__(self):
            self.max_height = 0
            self.time = 0
            self.speed = 0
    
        def func2(self):
            print('飞行器的对象方法')
    
    
    class Bird(Fly, Animal):
        pass
    
    
    
    print(Bird.num)
    print(Bird.name)
    b = Bird()
    b.func1()
    b.func2()
    
    print(b.age, b.gender)
    print(b.max_height, b.speed, b.time)
    
  3. 私有化

    1. 访问权限

      • 公开的: 在类的内部和类的外部都可以使用, 并且可以被继承
      • 保护的: 在类的内部可以使用, 也可以被继承, 但是不能在类的外部使用
      • 私有的: 只能在类的内部使用. 不能被继承也不能在类的外部使用
      • 从真正意义的访问权限上讲, python中所有的内容都是公开的, python的私有化是假的私有化
    2. 私有化

      • 在需要私有化的属性名或者方法名前加__(不能同时在名字的最后也加__)

      • class A:
            num = 100
            __name = 'abc'
        
            @classmethod
            def func1(self):
                print('类的内部num',A.num)
                print('类的内部的__name:', A.__name)
        
        
        A.func1()
        print(A.num)
        # print(A.__name)
        
  4. 文件发送

    1. 发送邮件基本流程

      1. 准备账号

          1. 什么邮箱 2)邮箱账号 3)邮箱密码(QQ邮箱需要先获取授权码)
      2. 登陆邮箱

        1. 连接邮箱服务器

          connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
          
        2. 登陆邮箱账号

          con.login('1139769676@qq.com', 'gzsmuokznorwfjfj')
          
      3. 准备要发送的邮件

        from email.mime.multipart import MIMEMultipart     # MIMEMultipart  -  邮件类
        from email.header import Header
        from email.mime.text import MIMEText
        
        1. 创建一个空的邮件对象

          email = MIMEMultipart()
          
        2. 设置邮件主题

          email[‘Subject’] = Header(‘第一个自动发送的邮件’, ‘utf-8’).encode()

        3. 设置邮件发送者

          email['From'] = 'yegou<1139769676@qq.com>'
          
        4. 设置邮件接收者

          email['To'] = '收件人昵称<819259227@qq.com>'
          
        5. 添加正文

          content = MIMEText('hello  world!', 'plain', 'utf-8')
          email.attach(content)
          
      4. 发送邮件

        connect.sendmail('1139769676@qq.com', '819259227@qq.com>', email.as_string())
        connect.quit()
        
    2. 发送超文本邮件内容

      1. 创建一个空的邮件对象

        email = MIMEMultipart()
        
        1. 设置邮件主题

          email[‘Subject’] = Header(‘第一个自动发送的邮件’, ‘utf-8’).encode()

        2. 设置邮件发送者

          email['From'] = 'yegou<1139769676@qq.com>'
          
        3. 设置邮件接收者

          email['To'] = '收件人昵称<819259227@qq.com>'
          
        4. 添加正文

          content = MIMEText('hello  world!', 'plain', 'utf-8')
          email.attach(content)
          
        5. 发送邮件

          connect.sendmail('1139769676@qq.com', '819259227@qq.com>', email.as_string())
          connect.quit()
          
上一篇:Day18_继承和邮件自动发送


下一篇:day18 redis stream