Day12_Python元类、type动态创建类、Python动态创建方法、Python运算符重载、Python发邮件、短信

12.01_Python语言基础(类对象)(熟悉)
12.02_Python语言基础(动态创建类)(熟练)
12.03_Python语言基础(type创建类)(熟练)
12.04_Python语言基础(使用type函数创建带有属性的类)(掌握)
12.05_Python语言基础(type创建带有继承关系的类)(掌握)
12.06_Python语言基础(type动态创建带方法的类)(掌握)
12.07_Python语言基础(__class__)(掌握)
12.08_Python语言基础(python是动态语言)(掌握)
12.09_Python语言基础(运行中给类绑定方法)(熟练)
12.10_Python语言基础(运行过程中删除属性和方法)(熟练)
12.11_Python语言基础(@property)(掌握)
12.12_Python语言基础(运算符的重载)(了解)
12.13_Python语言基础(发邮件)(熟练)
12.14_Python语言基础(发送短信)(熟练)

12.01_Python语言基础(元类)(了解)

python中的类,类同样也是一种对象,只要使用关键字class
python解释器在执行的时候会创建一个对象

class Test(object):passtest = Test()
print(test)#结果为类创建对象在内存中的地址

判断一个对象是否在某个类中–hasattr(obj,str)

class Test(object):passtest = Test()
print(test)
print(Test)def info(o):print(o)
#可以将类作为参数传递函数
info(test)
#可以为类添加新的的属性
print(hasattr(Test,"new_attribute"))
Test.new_attribute = "haha"
print(hasattr(Test,"new_attribute"))
print(Test.new_attribute)#将一个类赋值给一个变量
test1 = Test
print(test1)

12.02_Python语言基础(动态创建类)(熟练)

动态创建类

def choose_name(name):if name == "haha":class haha(object):passreturn hahaelse:class heihei(object):passreturn heiheimyClass = choose_name("haha")
print(myClass)#函数返回的haha --->  类,不是类的实例
print(myClass())#返回类创建的实例,也是对象

python中的内联函数type()

print(type(1))
print(type("1"))
print(type(choose_name("haha")))#类的类型  返回值-->type

12.03_Python语言基础(type创建类)(熟练)

  • 动态创建类

    • 格式:

      • type(类名,由父类名称组成的元祖(针对继承的情况,可以为空),包含属性的字典(名称和值))

type创建类案例:

Test01 = type("Test01", (), {})
print(Test01)
print(Test01()) 输出结果:
<class '__main__.Test00'>
<__main__.Test00 object at 0x000001360A04C160>

结果:显示和我们学习的类具有一样类型的内存地址

12.04_Python语言基础(使用type函数创建带有属性的类)(掌握)

  • type接受一个字典来定义类的属性
  • type(“类名”,(),{“name”:“zhangsan”})

type创建有内容的类

Test01 = type("Test01", (), {"name": "hello", "age": 18})
print(Test01)
print(Test01())
print(Test01().name)
print(Test01().age)输出结果:
<class '__main__.Test01'>
<__main__.Test01 object at 0x0000025B5773B860>
hello
18

12.05_Python语言基础(type创建带有继承关系的类)(掌握)

Test01 = type("Test01", (), {"name": "hello", "age": 18})
print(Test01)
print(Test01())
print(Test01().name)
print(Test01().age)Test02 = type("Test02", (Test01,), {})
print(Test02)
print(Test02())
print(Test02.__mro__)输出结果:
<class '__main__.Test02'>
<__main__.Test02 object at 0x000002BBD33FBA58>
(<class '__main__.Test02'>, <class '__main__.Test01'>, <class 'object'>)

注意:

type函数中有三个参数,字符串是类名,元祖中是父类的名字,字典中添加属性

添加的属性是类属性,不是实例属性

添加的方法可以使普通方法,静态方法,类方法


12.06_Python语言基础(type动态创建带方法的类)(掌握)

type添加实例方法

1,添加实例方法
Test01 = type("Test01", (), {"name": "hello", "age": 18})
print(Test01)
print(Test01())
print(Test01().name)
print(Test01().age)def test(self):print("haha")Test02 = type("Test02", (Test01,), {"test": test})
print(Test02)
print(Test02())
print(Test02().test)
# demo02 = Test02().
Test02().test()
print(Test02.__mro__)

type添加一个静态方法和类方法

1,添加静态方法
@staticmethod
def test03():print("hahaha--test03")return "test03"Test003 = type("Test003", (Test01,), {"test03": test03})
print(Test003)
print(Test003().test03())2,添加类方法
@classmethod
def test04(cls):print("hahaha--test04")return "test04"Test004 = type("Test004", (Test01,), {"test04": test04})
print(Test004)
print(Test004().test04())

总结:

元类是创建类所需要的类,创建类就是为了创建类的实例对象

python中类也是对象

元类:就是用来创建这些类(对象)的类----》元类

myclass = type(name,(),{})#使用元类创建一个对象,这个对象称之为类

myobject = myclass()#使用类创建类的实例对象

type实际上就是一个元类,是python在幕后创建所有类的元类


12.07_Python语言基础(class)(掌握)

__class__可以查看元素、对象所属的类,功能和type相似

print("-" * 30)
age = 35
print(age.__class__)
name = "zhangsan"
print(name.__class__)def test():passprint(test.__class__)  # functionclass demo:passprint(demo.__class__)  # typeprint(age.__class__.__class__)  # type
print(name.__class__.__class__)输出结果:
------------------------------
<class 'int'>
<class 'str'>
<class 'function'>
<class 'type'>
<class 'type'>
<class 'type'>

12.08_Python语言基础(python是动态语言)(掌握)

动态语言的定义

  • 变量可以任意更改,不用考虑类型
  • 类可以当做参数传递
  • 方法,函数可以动态添加到类中
  • 属性可以动态添加到类中
  • 。。。 。。。

运行中给对象绑定(添加属性)

class Person(object):def __init__(self, name=None, age=None):self.name = nameself.age = ageP = Person("小明", "22")
P.sex = "male"
print(P.sex)输出结果:
male

运行的过程中给类绑定属性

class Person(object):def __init__(self, name=None, age=None):self.name = nameself.age = agep = Person("小丽", "23")
Person.sex = None
print(p.sex)

总结:

运行中给对象绑定属性-----》直接通过实例对象设置

运行中给类绑定属性-----》直接通过类对象设置


12.09_Python语言基础(运行中给类绑定方法)(熟练)

####使用type动态添加方法

print("-" * 30)class Person(object):def __init__(self, name=None, age=None):self.name = nameself.age = agedef eat(self):print("吃饭....")def run(self, speed):print("%s在移动,速度%s" % (self.name, speed))p = Person("老王", 23)
p.eat()# p.run()
person = type("person", (Person,), {"run": run})
P = person("小王", "24")
P.run("220")输出结果:
------------------------------
吃饭....
小王在移动,速度220

使用types动态添加方法

print("*" * 30)import typesclass Person(object):def __init__(self, name=None, age=None):self.name = nameself.age = agedef eat(self):print("吃饭....")def run(self, speed):print("%s在移动,速度%s" % (self.name, speed))P = Person("小王","24")
# P.run("220")P.run = types.MethodType(run,P)#第一个参数L:需要添加的方法,参数二:添加到该类的实例对象
P.run("100")运行结果:
******************************
小王在移动,速度100

动态添加一个静态方法

# 定义一个类方法
@classmethod
def testClass(cls):cls.num = 150# 定义一个静态方法
@staticmethod
def testStatic():print("----static method-----")
P = Person("老王",22)
Person.testClass = testClass    # 把静态方法加入到类中
Person.testClass()              # 调用类的静态方法,执行方法中的方法体
print(Person.num)               # 输出调用内容print("$" * 30)
# 添加静态方法
Person.testStatic = testStatic
Person.testStatic()输出结果:
******************************
150
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
----static method-----

12.10_Python语言基础(运行过程中删除属性和方法)(熟练)

  • 删除的方法:

    • del 对象.属性名
    • delattr(对象,“属性名”)

12.11_Python语言基础(@property)(掌握)

私有的属性添加给getter和setter

class Money(object):def __init__(self):self.__money = 0def getMoney(self):return self.__moneydef setMoney(self, value):if isinstance(value, int):self.__money = valueelse:print("error:不是整型")# 先后调用两个方法,调用set方法的值,通过set设置money = property(getMoney, setMoney)  a = Money()
print(a.money)
a.money = 100
print(a.money)print(a.getMoney())

使用property实现getter 和 setter方法的功能

如何实现set/get------》修饰器-----》@property
@property--->属性函数,可以对属性赋值时候做必要的检查,并保证代码的原有功能
作用:
1.将方法转化为只读
2.重新实现一个属性的设置和读取方法,可做边界判定class Money:def __init__(self):self.__money = 0@propertydef money(self):return self.__money@money.setterdef money(self, value):if isinstance(value, int):self.__money = valueelse:print("error....")a = Money()
print(a.money)
a.money = 189
print(a.money)

案例2:

#使用set和get方法
class Person(object):def __init__(self,name,age):#属性直接对外暴露# self.age = 12#限制属性self.__name = nameself.__age = agedef getAge(self):return self.__agedef setAge(self,age):if age < 0:age = 0self.__age = age# 使用修饰器实现set和get功能
print("*" * 30)class Person:def __init__(self):self.__name = "oo"self.__age = 34@propertydef age(self):return self.__age@age.setterdef age(self, age):if age > 0 and age < 100:self.__age = agep = Person()
print(p.age)

12.12_Python语言基础(运算符的重载)(了解)

  • 同样的运算符执行不同数据之间的运算时,采用不同的计算方式

运算符的重载案例1:

print(1+2)
print("1"+"2")

案例2:

class Person(object):def __init__(self,num):self.num = num#运算符重载def __add__(self, other):return Person(self.num+other.num)def __str__(self):return "num="+str(self.num)
per1 = Person(1)
per2 = Person(2)
print(per1+per2)#3  ====print(per1.__add__(per2))
print(per1.__add__(per2))
print(per1)
print(per2)

不同的类型数据用加法会有不同的解释


12.13_Python语言基础(发邮件)(了解)

SMTP是SIMPLE MAIL TRANSFER PROTOCOL的缩写,
一般的发信软件,如Outlook Express、FoxMail、Eudora都是使用这个协议进行发信的。
SMTP Host 中文意思就是"简单邮件传送协议服务器"
一般免费的邮箱,如下列出的,他们的SMTP服务器就是在域名前加上smtp就行了.
smtp.163.com
smtp.21cn.com
smtp.sina.com.cn
smtp.sohu.com
smtp.126.com
对应的别一个邮件协议是:POP3(Post Office Protocol 3)。
它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。
它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地
主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,
而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

乞丐版

from email.mime.text import MIMETextmsg = MIMEText('hello, send by Python...', 'plain', 'utf-8')# 输入Email地址和口令:
from_addr = "dusine@126.com"
password = "XXXXXX"
# 输入SMTP服务器地址:
smtp_server = "smtp.126.com"
# 输入收件人地址:
to_addr = "dujunqiang@xxxxx.com"import smtplibserver = smtplib.SMTP(smtp_server, 25)  # SMTP协议默认端口是25
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

精装版

12.14_Python语言基础(发送短信)(了解)

使用亿信互联

# 接口类型:互亿无线触发短信接口,支持发送验证码短信、订单通知短信等。
# 账户注册:请通过该地址开通账户http://user.ihuyi.com/register.html
# 注意事项:
# (1)调试期间,请使用用系统默认的短信内容:您的验证码是:【变量】。请不要把验证码泄露给其他人。
# (2)请使用 APIID 及 APIKEY来调用接口,可在会员中心获取;
# (3)该代码仅供接入互亿无线短信接口参考使用,客户可根据实际需要自行编写;# !/usr/local/bin/python
# -*- coding:utf-8 -*-
import http.client
import urllib.parsehost = "106.ihuyi.com"
sms_send_uri = "/webservice/sms.php?method=Submit"# 查看用户名 登录用户中心->验证码通知短信>产品总览->API接口信息->APIID
account = "C45031386"
# 查看密码 登录用户中心->验证码通知短信>产品总览->API接口信息->APIKEY
password = "481af8a3a877b0275d0adb91d0d7fdae"def send_sms(text, mobile):# 参数params = urllib.parse.urlencode({'account': account, 'password': password, 'content': text, 'mobile': mobile, 'format': 'json'})# 请求头headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}# 链接目标conn = http.client.HTTPConnection(host, port=80, timeout=30)# 发起请求conn.request("POST", sms_send_uri, params, headers)# 获取响应response = conn.getresponse()# 获取响应内容response_str = response.read()# 关闭连接conn.close()# 把结果返回给调用者return response_strif __name__ == '__main__':# 手机号码mobile = "1897012800"# 发送的验证码内容text = "您的验证码是:121254。请不要把验证码泄露给其他人。"print(send_sms(text, mobile))

Python基础笔记_Day12_Python元类、type动态创建类、Python动态创建方法、Python运算符、Python发邮件、短信相关推荐

  1. Python 基础笔记

    Python 基础笔记 内置函数 print() 打印输出 type() 数据类型查询 isinstance() 判断数据是否是已知类型 input() 接受键盘输入 range() 函数 forma ...

  2. 『Python基础-9』元祖 (tuple)

    『Python基础-9』元祖 (tuple) 目录: 元祖的基本概念 创建元祖 将列表转化为元组 查询元组 更新元组 删除元组 1. 元祖的基本概念 元祖可以理解为,不可变的列表 元祖使用小括号括起所 ...

  3. Python基础 笔记(一) Python的介绍

    Python基础 笔记(一) Python的介绍 您好! 欢迎来到木易巷! 接下来,让我们一起来了解Python,走进Python~ 1.编程语言 编程语言(programming language) ...

  4. Python基础知识详解 从入门到精通(八)魔法方法

    目录 Python基础知识详解 从入门到精通(八)魔法方法 什么是魔法方法 基础魔法方法(较为常用) 比较操作符 算数运算符 反运算(类似于运算方法) 增量赋值运算 一元操作符 类型转换 上下文管理( ...

  5. python基础笔记,超详细,包含面向对象基础,爬虫实战【持续更新中...】

    前言: 本笔记中的函数和方法同义,面向python3 本笔记部分概念及代码由newbing搜集整理得出 本笔记适合有一定其他编程语言基础的同学,因为笔记中省略了部分基础概念(比如整型,浮点型等基本数据 ...

  6. 霍格沃兹测试开发学社技术学习笔记之——Python基础笔记

    # 阶段十一-Python语言和测试框架(1) ## 1.pycharm环境变量配置和安装 ## 2.基础数据类型 数字 字符串 ## 3.运算符 字符串算数运算符 比较运算符 赋值运算符 逻辑运算符 ...

  7. python基础笔记二_面向对象

    面向对象 Object Oriented 概述 面向过程 1.分析出解决问题的步骤,然后逐步实现.例如:婚礼筹办-- 发请柬(选照片.措词.制作)-- 宴席(场地.找厨师.准备桌椅餐具.计划菜品.购买 ...

  8. [PYTHON]python 基础笔记(1)

    最近一直在研究python... 自学了一段时间,感觉对我这种本身脑子转不过弯的人来是真心是个不错的选择.. 以下是自己学习总结的笔记,有需要的朋友可以用来参考. 系统版本: Centos6.3 x6 ...

  9. 测试开发之Python核心笔记(19): 深入理解类的属性

    属性作为类的重要组成部分,除了平时常用的读取和设置操作之外,还有很多隐藏的.高级的操作.比如属性的查找顺序.属性的类型检查.限制属性的动态添加等等.这一小节,就让我们深入理解属性的各种高级操作. 19 ...

最新文章

  1. 【Java注解】注解基础
  2. Caused by: org.springframework.amqp.AmqpException: No method found for class [B
  3. Jerry Wang 2013年几篇比较受欢迎的SAP社区博客
  4. 黑侠百度URL批量推送程序
  5. 跨湖跨仓场景下如何实现海量数据分钟级分析
  6. 新概念英语(1-59)Is that all
  7. KONG网关 — 插件开发
  8. 局域网即时通讯软件java_如何选择企业即时通讯软件?
  9. 易语言批量替换html,易语言实现批量文本替换操作的代码
  10. 深度学习 个人理解使用余弦相似度对人脸图片识别的过程
  11. Python的pandas安装超级详细
  12. db2实现两个数相减_DB2 日期相减
  13. 移动中兴服务器地址,一中国移动宽带各地dns服务器地址.doc
  14. XTU,C语言,Tri-Triangle
  15. 小米5s html,小米5S线刷MIUI9系统的方法_小米5S专用的MIUI9系统刷机包
  16. java时间戳转换_Java编程实现时间和时间戳相互转换实例
  17. 我所了解的一些路由器对比
  18. 圣科车衣,给予您的爱车完美守护
  19. linux load averages 和 cpu 使用率
  20. 戈壁日记——一个来了又来的地方

热门文章

  1. python中sorted函数的用法及字典如何根据键或值进行排序
  2. 思科与华为BGP配置命令对比
  3. 你的无人机为什么不会乱飘?
  4. python奥运会_用python分析kaggle_奥运会数据的案例
  5. 诺康得NKD完成500万天使轮融资,专注于糖化学细胞治疗
  6. volatile禁止重排序详解
  7. 总结vue 需要掌握的知识点
  8. 【C++入门】函数重载,引用,内联函数......
  9. msk 频偏_数字调制MSK探究
  10. 获取抖音商品详情接口调用展示