Day18-继承与邮件发送
-
继承
-
什么是继承
- 继承就是让子类直接拥有父类的属性和方法
子类 - 继承者
父类 - 被继承者
- 继承就是让子类直接拥有父类的属性和方法
-
继承的方法
-
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)
-
-
子类中添加属性和方法
- 添加类属性、方法
- 直接在子类中添加新的类属性和新的方法
- 添加对象属性
- 在子类的__init__方法中添加新的对象属性, 同时使用super()去调用父类的__init__
- super的用法:
- super(类, 对象).方法() - 调用指定类的父类的指定方法
- 添加类属性、方法
-
类中的方法的调用
- 在通过类或者对象调用方法时, 先在当前类搜索, 如果不存在再去父类搜索…以此类推, 如果找到基类都没找到, 程序才会报错
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 )
-
-
多继承
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)
-
私有化
-
访问权限
- 公开的: 在类的内部和类的外部都可以使用, 并且可以被继承
- 保护的: 在类的内部可以使用, 也可以被继承, 但是不能在类的外部使用
- 私有的: 只能在类的内部使用. 不能被继承也不能在类的外部使用
- 从真正意义的访问权限上讲, python中所有的内容都是公开的, python的私有化是假的私有化
-
私有化
-
在需要私有化的属性名或者方法名前加__(不能同时在名字的最后也加__)
-
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)
-
-
-
文件发送
-
发送邮件基本流程
-
准备账号
-
- 什么邮箱 2)邮箱账号 3)邮箱密码(QQ邮箱需要先获取授权码)
-
-
登陆邮箱
-
连接邮箱服务器
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
-
登陆邮箱账号
con.login('1139769676@qq.com', 'gzsmuokznorwfjfj')
-
-
准备要发送的邮件
from email.mime.multipart import MIMEMultipart # MIMEMultipart - 邮件类 from email.header import Header from email.mime.text import MIMEText
-
创建一个空的邮件对象
email = MIMEMultipart()
-
设置邮件主题
email[‘Subject’] = Header(‘第一个自动发送的邮件’, ‘utf-8’).encode()
-
设置邮件发送者
email['From'] = 'yegou<1139769676@qq.com>'
-
设置邮件接收者
email['To'] = '收件人昵称<819259227@qq.com>'
-
添加正文
content = MIMEText('hello world!', 'plain', 'utf-8') email.attach(content)
-
-
发送邮件
connect.sendmail('1139769676@qq.com', '819259227@qq.com>', email.as_string()) connect.quit()
-
-
发送超文本邮件内容
-
创建一个空的邮件对象
email = MIMEMultipart()
-
设置邮件主题
email[‘Subject’] = Header(‘第一个自动发送的邮件’, ‘utf-8’).encode()
-
设置邮件发送者
email['From'] = 'yegou<1139769676@qq.com>'
-
设置邮件接收者
email['To'] = '收件人昵称<819259227@qq.com>'
-
添加正文
content = MIMEText('hello world!', 'plain', 'utf-8') email.attach(content)
-
发送邮件
connect.sendmail('1139769676@qq.com', '819259227@qq.com>', email.as_string()) connect.quit()
-
-
-