元类, pymysql

一、元类

  • 自定义元类
'''
1、什么是元类?
- 类的类就是type,其实type就是元类 2、元类的作用? 3、如何创建元类以及使用?
''' # # 1、一切皆对象
# list1 = [] # list1 = list([])
# print(type(list1)) #<class 'list'> #
# # # 2、自定义一个类
# class Chinese(object):
# country = 'china'
#
# def __init__(self, name, age, sex):
# self.name = name
# self.age = age
# self.sex = sex
#
#
# obj = Chinese('yafeng', 18, 'male')
# print(type(obj)) #<class '__main__.Chinese'>
# print(Chinese) #类本质上也是一个对象,Python中一且皆对象
# # <class '__main__.Chinese'>, # 3、如何产生类
#1) 通过class关键字产生类
#2) 通过调用type类:type() ----> obj ---->Chinese # what:指的是类名
# bases:继承的父类(object)
# dict:类的名称空间 #
# code = '''
# country = 'china'
# def __init__(self, name, age, sex):
# self.name = name
# self.age = age
# self.sex = sex
# ''' # class_attr = {}
# exec(code, {}, class_attr)
#
#
# # type(类的名字, 类的基类,类的名称空间)
# obj = type('Chinese', (object, ), class_attr)
# print(obj) #<class '__main__.Chinese'>
# print(Chinese) #1、什么是元类?
# 类的类就是type,其实type就是元类 # 2、为什么要使用元类?
# 因为元类可以控制类的创建过程 #type是python内置的元类 # 自定义一个元类
class MyMetaClass(type): #控制类的创建
# 优酷需要使用的部分
def __init__(self, class_name, class_bases, class_dict):
print(type(class_name)) #要求类的首字母必须大写
if not class_name.istitle():
raise NameError('类的首字母必须大写!') # 规定类必须要写注释
if not class_dict.get('__doc__'):
raise TypeError('必须得写注释!!!') # 必须将类的类名,类的基类,类的名称空间一并返给 type 中的__init__
super().__init__(class_name, class_bases, class_dict) # 了解:元类更深层次的作用
# 控制调用类的行为
# 为什么调用类就一定会产生一个空对象,为什么一定会执行__new__
# 其实就是type 内部一定会调用一次__call__,有__call__来帮你调用__new__ # 元类中的__call__就是创建类的过程!!!
def __call__(self, *args, **kwargs):
print(args) # User类括号中的值
# 1、造一个空对象obj
obj = object.__new__(self) # 创造一个空对象 self ---> User print(obj.__dict__, 1111111) # 2、调用类时,__call__会立马调用User.__init__, 并且将obj连同User括号内的参数一同传给__init__
self.__init__(obj, *args, **kwargs) # return 一个真正创建的对象
return obj ## obj = MyMetaClass()
# obj() # obj()----> User(10,20) ---->user_obj # 被控制类在定义阶段 类名(metaclass=自定义的元类)---->会将当前类的类名、基类、类的名称空间 一并传给 自定义的元类 # metaclass --->自定义的元类看---->低调做那个自定义的元类(类名,基类,类的名称空间) # type(类名,基类,类的名称空间) class User(object, metaclass=MyMetaClass): # MyMetaClass(User, (object,), {'x':10}) '''我要成为年薪百万的男人,tank老师很好啊,向他学习''' def __init__(self):
pass x = 10
pass obj = User() print(obj)

二、pymysql

  • 通过pymysql 去连接数据库
# 下载第三方模块:在cmd 中下载

# pip install pymysql

# 面条版
import pymysql # 1.连接数据库
client = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='db4',
charset='utf8', #此处不能写utf-8
autocommit=True
) # print(client) # 2.获取游标对象 ---->游标 可以用来提交sql命令
course_obj = client.cursor(pymysql.cursors.DictCursor) # 3.通过execute 可以提交sql语句 # 1) 查数据
# sql = 'select * from emp'
#
# # 提交sql语句
# course_obj.execute(sql)
#
# #4.提交后,通过cursor_obj 对象.fetchall() 获取所有查询到的结果
#
# res = course_obj.fetchall()
# print(res)
#
# for dic in res:
# print(dic) # 2) 插入数据
# 创建表
# sql = 'create table user(id int, name varchar(16))'
# course_obj.execute(sql)
#
# sql = 'insert into user(id, name) values(1, "yafeng")'
# course_obj.execute(sql) # 注意得运行后才可以上传到数据库 # 3) 更新数据
# try:
# sql = 'update user set name="yafeng_很帅" where id=1'
#
# course_obj.execute(sql)
#
# except Exception as e:
# print(e) # # 4) 删除数据
# sql = 'delete from user'
# course_obj.execute(sql) # 关闭游标
# course_obj.close()
#
#
# # 关闭客户端连接
# client.close()

元类, pymysql的更多相关文章

  1. 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块

    '''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...

  2. Python基础(九) type元类

    python元类:type()    元类是python高阶语法. 合理的使用可以减少大量重复性的代码. 元类实际上做了以下三方面的工作: 干涉创建类的过程 修改类 返回修改之后的类 为什么使用元类? ...

  3. 元类,sqlalchemy查询

    import sqlalchemy from sqlalchemy.ext.declarative import declarative_base #创建连接实例 db = sqlalchemy.cr ...

  4. python之元编程(元类实例)

    本实例是元类实例,功能是记录该的子类的类名,并以树状结构展示子类的类名. RegisterClasses继承自type,提供的功能是在__init__接口,为类创建了childrens的集合,并类名保 ...

  5. python 元类

    转载自  http://blog.jobbole.com/21351/ 类也是对象 在理解元类之前,你需要先掌握Python中的类.Python中类的概念借鉴于Smalltalk,这显得有些奇特.在大 ...

  6. Python语言特性之2:元类

    问题:Python中的元类(metaclasses)是什么?一般使用它干什么? 原地址:http://stackoverflow.com/questions/100003/what-is-a-meta ...

  7. python基础——使用元类

    python基础——使用元类 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello. ...

  8. [python]python元类

    这两天在看Django框架,里面的filter实现原理搞不明白,最后发现跟python的元类有关系. 原文:http://stackoverflow.com/questions/100003/what ...

  9. Python基础:元类

    一.概述 二.经典阐述 三.核心总结 1.类的创建过程 2.元类的使用惯例 四.简单案例 1.默认行为 2.使用元类 五.实践为王 一.概述 Python虽然是多范式的编程语言,但它的数据模型却是 纯 ...

随机推荐

  1. 【数据结构】之队列(Java语言描述)

    在[这篇文章]中,我简单介绍了队列的基本数据结构及操作方式,并用C语言代码描述了队列的基本功能实现. JDK中默认为我们提供了队列的API—— Queue . Queue是一个接口,其中提供了处理队列 ...

  2. Java package 包的命名规范。

    Java的包名都有小写单词组成,类名首字母大写:包的路径符合所开发的 系统模块的 定义,比如生产对生产,物资对物资,基础类对基础类.以便看了包名就明白是哪个模块,从而直接到对应包里找相应的实现. 由于 ...

  3. 计算机硬件-CPU

    计算机硬件-CPU 冯.诺依曼计算机体系 1.计算机硬件设备由存储器.运算器.控制器.输入设备和输出设备五部分 2.采取二进制形式和指令 3.将程序(数据和指令序列)预先存放在主存储器中,使计算机在工 ...

  4. python迭代器生成器-迭代器和list区别

    迭代 生成 for循环遍历的原理 for循环遍历的原理就是迭代,in后面必须是可迭代对象 为什么要有迭代器 对于序列类型:字符串.列表.元组,我们可以使用索引的方式迭代取出其包含的元素.但对于字典.集 ...

  5. 修改PHP上传文件大小限制

    1. 在php.ini中,做如下修改: file_uploads = on upload_tmp_dir = /home/upload upload_max_filesize = 4000M post ...

  6. TypeScript躬行记(1)——数据类型

    TypeScript不仅支持JavaScript所包含的数据类型,还额外扩展了许多实用的数据类型,例如枚举.空值.任意值等. 一.JavaScript的数据类型 JavaScript的数据类型包括6种 ...

  7. 为啥HashMap的默认容量是16?

    集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生. 在日常开发中,我们经常会像如下方式以下创建一个HashMap: Map& ...

  8. (转)oracle视图详解

    Oracle视图详解   一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的.视图只有逻辑定义.每次使用的时候,只是重新执 ...

  9. mac install: /usr/bin/unrar: Operation not permitted

    按照教程mac下解压缩rar文件工具-rarosx(免费),在mac上安装rar,在执行命令 sudo install -c -o $USER unrar /bin 出现错误:install: /bi ...

  10. AcWing 291.蒙德里安的梦想

    题目:蒙德里安的梦想 链接:(蒙德里安的梦想)[https://www.acwing.com/problem/content/293/] 题意:求把N * M的棋盘分割成若干个1 * 2的长方形,有多 ...