Day9 面向对象
一、面向对象
1、类、一个种类或者一个模型,类里边可以定义函数、变量(比如操作数据库,单条或多条,他们是同一个种类)
2、模型是不能直接用的,得根据模型制作出东西。
self:代表的本类对象,加了self后函数质检能互相用
class My3():
# pass
class Person:
def __init__(self,name): #构造函数,自动会执行
print('开始造人了',name)
self.name = name #self:实例变量 指的就是伦伦 ,加self 是为了函数之间能互相用,
self.age = 19
self.data = '哈哈哈'
# print('self的内存地址。。',id(self)) #获取内存地址
self.addr = '北京'
def cry(self,size):
print('%s在%s哭。年龄是%s' % (size,self.name, self.age))
self.size = '大哭'
self.date = '20190106'
def say(self):
print('我叫%s。我住在%s.'% (self.name, self.addr))
print(self.size)
print('今天的日期是',self.date)
lyl = Person('伦伦') #通过person 实例化了一个对象
cq = Person('陈琦')
lyl.friend = cq
print('lyl的朋友',lyl.friend.name)
# lyl.addr = '北京'
# lyl.cry('啦啦') # = cry(lyl)
# lyl.say()
# print('lyl.....name',lyl.name)
# print('lyl.....age',lyl.age)
解释原理:
#解释原理
def car(self,car_name):
self.car_name= car_name
car(lyl,'奔驰') #把lyl这个实例传给了self,self指的就是lyl这个实例
print(lyl.car_name)
3、类变量
类变量:
实例变量
类方法:1、不需要实例化就可以调用的方法;2、不可以使用实例方法、实例变量; 3、他可以使用类变量;4、有其他类方法,可以调用其他的类方法
静态方法:1、不需要实例化就能调用的 2、他就是
属性方法:看起来像变量的一个方法
class Car: #实例方法 :可以调用类方法
wheel = 4 #类变量 (汽车都有四个轮子,公共的变量可以定义在这里)
def __init__(self,color,p):
self.color = color # 实例变量
self.p = p
def help(self):
print('汽车有%s个轮子'%self.wheel)
print('汽车的颜色是%s'%self.color)
print('牌子%s'%self.p)
print('='*10)
类方法:1、不需要实例化就可以调用的方法;2、不可以使用实例方法、实例变量; 3、他可以使用类变量;4、有其他类方法,可以调用其他的类方法
@classmethod #类方法
def check_wheel(cls):
print('cls的内存地址',id(cls))
print(cls.wheel)
@staticmethod #静态方法#打印一个帮助文档可以定义一个静态方法, (这个目前有问题)
def help2():
print('这个类的作用是造汽车,它里边有xx方法')
@property #属性方法
def yesterday(self):
import datetime
res = datetime.date.today() + datetime.timedelta(-1)
return str(res)
def tom(self):
import datetime
res = datetime.date.today() + datetime.timedelta(1)
return str(res)
实例:就是根据模型制作出来的东西
实例化:就是做东西的过程
方法:类里面的函数
属性:类里边的变量
构造函数:类在实例化的时候自动执行的一个函数
析构函数:实例在销毁的时候自动执行的一个函数
import pymysql
class MyDb:
def __init__(self,host,user,password,db,port=3306,charset='utf8'):#构造函数,
print('连接数据库')
self.conn = pymysql.connect(host=host,user=user,password=password,
db=db,port=port,charset=charset)
self.cur = self.conn.cursor()
def execute_one(self,sql):
print('返回单条数据')
self.cur.execute(sql)
res = self.cur.fetchone()
return res
def execute_many(self,sql):
print('返回多条数据的')
self.cur.execute(sql)
res = self.cur.fetchall()
return res
def __del__(self):#析构函数
print('关闭数据库连接')
self.cur.close()
self.conn.close()
my = MyDb('118.24.3.40','jxz','123456','jxz') #实例化
二、私有
私有:在变量、函数前面加下划线,代表私有,只能在类里边用
class My:
def test(self):
self.__password = 123456 #一旦这个方法加了下划线, 代表私有,只能在类里边用
def say(self):
print('password',self.__password)
m = My()
m.test()
# print(m.__password)
m.say()
三、继承
class Lm :
money = 1000
house = 5
def driver(self):
print('开车')
class Mcb(Lm): #在括号里把类名写上会把方法继承过来
def about_me(self):
print('我有%s 钱,%s 房子'%(self.money,self.house))
self.driver()
def driver(self):
print('会开28个轮子的汽车')
m = Mcb()
m.driver()
m.about_me()

浙公网安备 33010602011771号