总结
1. 继承
-
什么是继承
""" 继承就是让子类直接拥有父类的属性和方法 子类 - 继承者 父类 - 被继承者 """
-
继承语法
""" class 类名(父类1, 父类2, ...) pass 定义类的时候如果没有写继承关系,那么这个类默认继承python的基类:obhect class 类名: = class 类名(object) """ # 子类继承父类的属性和方法 class Person: num = 61 def __init__(self): self.name = '小明' self.age = 18 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) stu = Student() print(stu.name, stu.age, stu.gender) stu.func1() Student.func2() Student.func3()
-
子类中添加属性和方法
""" 1)添加类属性,方法 直接在子类中添加新的类属性和新的方法 2)对象属性 在子类的__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中的类方法') b = B() b.func1() b.func2() print(B.x, B.y) B.func3() print(b.study_id, b.school) 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(Animal, Fly): pass print(Bird.num) print(Bird.name) b = Bird() b.func1() b.func2() print(b.age, b.gender) # print(b.max_height, b.speed) 报错,只能继承一个对象属性
3. 私有化
-
私有化
""" 类的内容的访问权限分为三种 公开的:在类的内部和类的外部都可以使用,并且可以被继承 保护的:在类的内部可以使用,也可以被继承,但是不能在类的外部使用 私有的:只能在类的内部使用,不能被继承也不能在内的外部使用 从真正意义的访问权限上讲,python类中所有的内容都是公开的, python的私有化是假的私有化 """
-
在需要私有化的属性名或者方法名前加__(不能同时在名字的最后加__)
class A: num = 100 __name = 'abc' def __init__(self): self.x = 100 self.__y = 200 @classmethod def func1(cls): print('类的内部num:', A.num) print('类的内部的__name:', A.__name) A.func1() print(A.num) # print(A.__name) a = A() print(a.x) # print(a.__y) print(a.__dict__) # {'x': 100, '_A__y': 200} print(a._A__y)
4. 邮件自动发送
-
登陆邮箱
- 链接邮箱服务器
- 登陆邮箱
-
准备需要发送的邮件
- 创建一个空的邮件对象
- 设置邮件主题
- 设置邮件发送者
- 设置邮件接收者
- 添加正文
-
发送邮件
import smtplib from email.mime.multipart import MIMEMultipart # MIMEMultipart - 邮件类 from email.header import Header from email.mime.text import MIMEText connect = smtplib.SMTP_SSL('smtp.qq.com', 465) connect.login('QQ邮箱', '授权码') email = MIMEMultipart() email['Subject'] = Header('主题名', 'utf-8').encode() email['From'] = 'QQ邮箱 <QQ邮箱>' # 发送者邮箱 email['To'] = 'QQ邮箱' # 接收者邮箱 content = MIMEText('hello world!', 'plain', 'utf-8') email.attach(content) connect.sendmail('发送者QQ邮箱', '接收者QQ邮箱', email.as_string()) connect.quit()