python的静态类如何实现
python中没有静态类这个概念。
只有静态函数和类函数的概念。
静态函数无法访问类的自身对象,属性,但是类函数可以访问自身对象和属性。
这两个东西都不需要实例化。
那么其实也已经可以有静态类的效果了。
一般来说,使用静态类,无非是需要保持全局统一,并且减少资源的申请和回收,对于一些需要大量重复调用的类来说,写成一个静态类可以大大提升程序速度,减少系统开销。
要注意python中的静态类的使用是我们自己搞出来的,官方并没有说有这个东西,其初始化方法不能使用python的类的初始化函数__init__(self)。需要直接写在类的内部。如下:
class Test(object):
#直接在这里初始化
name = 'hello'
#类方法的定义方式
@classmethod
def ClassFun(cls):
print(cls.name)
#静态函数的定义方式
@staticmethod
def StaticFun():
print('hello_s');
if __name__ == '__main__':
Test.ClassFun()
print(id(Test))
Test.StaticFun()
print(id(Test))
下面是一个在操作mysql数据库时的一个具体应用:
import MySQLdb
class sql_opeartor():
db = MySQLdb.connect("localhost", "root", "123456", "blog", charset='utf8mb4')
cur = db.cursor()
@classmethod
def execute(cls, sql):
try:
# 执行SQL语句
cls.cur.execute(sql)
# 向数据库提交
cls.db.commit()
except:
# 发生错误时回滚
cls.db.rollback()
@classmethod
def query(cls, sql):
try:
# 执行SQL语句
cls.cur.execute(sql)
# 向数据库提交
cls.db.commit()
except:
# 发生错误时回滚
cls.db.rollback()
results_tuple = cls.cur.fetchall()
results_list = []
for result in results_tuple:
ans = []
for item in result:
ans.append(item)
results_list.append(ans)
return results_list
@classmethod
def create_table(cls, table_data=''):
sql = "create table {0};".format(table_data)
cls.execute(sql)
@classmethod
def delete_table(cls, table_name=''):
sql = 'delete from {0}'.format(table_name)
cls.execute(sql)
@classmethod
def drop_table(cls, table_name):
sql = 'drop table {0}'.format(table_name)
cls.execute(sql)
@classmethod
def show_table(cls, table_name=''):
sql = 'select * from {0}'.format(table_name)
cls.execute(sql)
if __name__ == '__main__':
data = sql_opeartor.query('show tables;')
print(data)