笔记继承和邮件自动发送
-
继承
-
什么是继承
继承就是让子类直接拥有父类的属性和方法
子类——继承者
父类——被继承者
-
继承语法
''' class 类名(父类1, 父类2, ...) pass # 属性方法 定义类的时候,如果没有写继承关系,那么这个类默认继承python的基类:object class 类名: 相当于 class 类名(object): ''' # 子类继承父类的属性和方法 class Person: num = 20 # 对象属性 def __init__(self): self.name = '小明' self.age = 19 self.gender = '男' # 对象方法 def func1(self): print(f'{self.name}岁') # 类方法 @classmethod def func2(cls): print(f'人的数量:{cls.num}') # 静态方法 @staticmethod def func3(): print(f'环境破坏') class Student(Person): pass print(Student.num) stu = Student() print(stu.name, stu.age, stu.gender) # 调用对象方法 stu.func1() #调用类方法 Student.func2() # 调用静态方法 Student.func3()
-
子类中添加属性和方法
-
添加类属性和方法
直接在类中添加属性和方法
-
对象属性
在子类的__init__方法中添加新的对象属性,同时使用super()取调用父类的__init__
supre(类,类的对象).方法()——调用指定类的父类的指定方法
class A: x = 10 # 对象属性 def __init__(self): self.a = 10 self.b = 20 # 对象方法 def func1(self): print('A的对象属性') class B(A): y ='abc' # 对象属性 def __init__(self): # super(类, 对象).方法() super().__init__() # 调用当前类的父类的__init__方法,先执行父类方法 self.study_id = '001' self.school = '北大' # 对象方法 def func2(self): print('B中的对象方法') # 类方法 @classmethod def func3(cls): print('B中的类方法') # 创建对象 b1 = B() # 调用对象方法 b1.func1() # 调用对象方法 b1.func2() print(B.x, B.y) print(b1.school, b1.study_id)
-
-
类中方法的调用
在通过类或者对象调用方法的时候,会先看当前类是否存在这个方法,如果存在就直接调用,如果不存在就看父类中有没有,如果父类中没有,就看父类的父类有没有,依此类推,直到基类中也没有,才会报错。
-
-
私有化
-
私有化
公开的:在类的内部和内的外部都可以使用,并且可以被继承
保护的:在类的内部可以使用,也可以被继承,但是不能在类的外部使用
私有的:只能在类的内部使用,不能被继承也不能被类的外部使用
从正真意义的访问权限上来说,python类中所有的内容(属性和方法)都是公开的。
python的私有化是假的私有化 -
在需要私有化的属性名或者方法前加__(不能在同时名字的后面加__)
class A: num = 100 __num = 'abc' def __init__(self): self.x = 300 self.__y = 400 @classmethod def func1(cls): print('类的内部',A.num) # 类的内部 100 print('类的内部的__name:', A.__num) # 类的内部的__name: abc A.func1() print(A.num) # 100 a = A() print(a.x) # 300 print(a.__dict__) # {'x': 100, '_A__y': 200} print(a._A__y) # 400
-
-
邮件自动发送
-
准备账号
import smtplib # 1.登录邮箱 # 1)连接邮箱服务器 connect = smtplib.SMTP_SSL('smtp.qq.com', 465) # 2)登录邮箱账号 connect.login('1228873220@qq.com', 'nrawjoyihyuzhgad') # 2.准备发送文件 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.header import Header # 1)创建一个空的邮件对象 email = MIMEMultipart() # 相当于登录以后打开写信操作 # 2)设置邮件主题 email['Subject'] = Header('发送邮件', 'utf-8').encode() # 转二进制 # 3)设置邮件发送人 email['From'] = 'andy <1228873220@qq.com>' # 4)设置邮件接收人 email['To'] = '2358944863@qq.com' # 5)添加正文 conment = MIMEText('520快乐!', 'plain', 'utf-8') email.attah(conment) # 正文关联邮件 # 6)发送邮件 connect.sendmail('1228873220@qq.com', '2358944863@qq.com', email.as_string) connect.quit()
-
-
发送超文本邮件
# 连接登录邮箱 import smtplib connect = smtplib.MMTP_SSL('smtp.qq.com', 465) connect.login('1228873220@qq.com', 'nrawjoyihyuzhgad') # 准备发邮件 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header # 创建空文件 email = MIMEMultipart() # 写主题 email['Subject'] = Hearder('发送邮件', 'utf-8').encode() # 发送人 email['Form'] = 'andy <1228873220@qq.com>' # 接收人 email['To'] = '2358944863@qq.com' # 添加正文 with open('content.html', encoding='utf-8') as f: content = MIMEText('f.read()', 'html', 'utf-8') email.attach(content) # 发送文件 connect.sendmail('1228873220@qq.com', '2358944863@qq.com', eamil.as_string()) connect.quit()
-
发送附件
import smtplib from email.mime.multipart import MIMEMultipart from email.header import Header from email.mime.image import MIMEImage from email.mime.text import MIMEText # 1. 登录邮箱 con = smtplib.SMTP_SSL('smtp.qq.com', 465) con.login('726550822@qq.com', 'rnezirniupuqbcch') # 2.构建邮件 email = MIMEMultipart() email['From'] = '发件人昵称 <726550822@qq.com>' email['To'] = '收件人昵称 <15300022703@qq.com>' email['Subject'] = Header('发送附件', 'utf-8').encode() # 0)添加普通正文 content = MIMEText('hello world!', 'plain', 'utf-8') email.attach(content) # 1)添加图片附件 # 打开图片 with open('files/luffy4.jpg', 'rb') as f: # 创建图片对象 image = MIMEImage(f.read()) # 设置图片为附件 image['Content-Disposition'] = 'attachment; filename="aaa.jpg"' # 将图片附件添加到邮件中 email.attach(image) # 添加多个图片附件 import os for f_name in os.listdir('files'): with open(f'files/{f_name}', 'rb') as f: image = MIMEImage(f.read()) image['Content-Disposition'] = 'attachment; filename="bbb.png"' email.attach(image) # 添加文本文件附件 with open('text/谷歌2017年股票数据.xlsx', 'rb') as f: file = MIMEText(f.read(), 'base64', 'utf-8') file["Content-Disposition"] = 'attachment; filename="gupiao.xlsx"' email.attach(file) # 发送邮件 con.sendmail('726550822@qq.com', '15300022703@qq.com', email.as_string()) con.quit()