阅读量: 70
面向对象编程
一、特点
- 类与实例:类有属性和方法,实例用于调用
- 封装:可以决定哪些属性和方法是可以访问的(public),哪些是受保护的(protected),哪些是私有的(private)
- 继承:子类继承父类所有可访问的方法和属性
- 多态:通常只有强类型编程语言(C#、C++、JAVA)才严格具备多态性,弱类型编程语言本身就体现为多态
二、示例
# 类名建议所有首字母大写
class Pepole:
# 定义类属性
course = '网络安全'
# name = ''
# age = 1
# nation = ''
# addr = ''
#析构方法:用于释放内存空间时使用,当方法不再被使用就自动释放
def __del__(self):
print('实例空间正在释放')
# 定义构造方法,实例化时会自动调用的方法,并且可以将实例变量(实例属性)定义于此
# self形参:类实例的引用,必须放在类方法的第一个形参,可以自动一名称,但是建议使用self
def __init__(self,name='张三',age=30,nation='汉',addr='北京'):
# 定义实例变量
self.name = name
self.age = age
self.nation = nation
self.addr = addr
# 定义类方法
def talk(self):
print('people在说话')
def work(self,type):
print(f'people在做{type}工作')
# 静态方法:直接使用类名而非实例调用的方法,静态方法常驻的内存空间
@classmethod
def teach(cls) # cls代表对类本身的引用
print(cls.course) # 类属性course用类的引用cls来调用
# 新建一个类Man,继承自people
class Man(People):
# 重写父类的talk方法
def talk(self):
print('子类正在说话')
if __name__ = '__main__':
# 基本的实例化及调用
p1 = People() # 类的实例化
p2 = People() # 不同的实例有不同的地址,类本身有一个地址
p1.name = '张三'
p2.name = '李四'
p1.talk()
# 通过构造方法进行实例化
p = People()
p = People('李四',20,'汉','南京')
print(p.name)
p.teach() # 类的静态方法,不建议使用实例进行调用
people.teach() # 类的静态方法,直接使用类名调用
# 子类Man的操作
m = Man()
m.talk()
三、数据库的操作类
import pymysql
class DB:
def __init__(self,host='localhost',user='root',password='123456',database='learn',charset='utf-8',type='default'):
self,conn = pymysql.connect(host=host,user=user,password=password,database=database,charset=charset)\
self.cursor = None
if type == 'default':
self.cursor = self.conn.cursor
elif type == 'dict':
self.cursor = self.conn.cursor(DictCursor)
else:
raise Exception("参数type错误,只能为default或dict")
def query(self,sql):
self.cursor.execute(sql)
result = self.cursor.fetchall()
return result
def updata(self.sql):
try:
self.cursor.exrcute(sql)
self.conn.commit()
print('更新成功')
except:
print('执行更新异常')
def __del__(self):
self.conn.close()
if __name__ = '__main__':
db = DB()
print(db.query('select * from user'))