今天学习的面向对象编程,根据老师的讲解,我的理解如下:
在学习面向对象编程之前,我们完成一个功能的代码编写思路是,先做什么、再做什么,然后做什么,最后做什么这种思路。这叫面向过程编程,没有固定的语法。
那面向对象编程的思路是什么,有什么语法格式呢?
对象,词典解释“行动或思考时作为目标的事物”。当然还有另外一种意思,恋爱对象。
对象是我们要做某件事或实现某个功能的“目标事物”,我们通过对象这么一个东西实现功能,他和list、dict、方法、函数一样,是编程语言中的一个概念,假如list、dict、函数等是人的四肢,那么对象就是“人”,所以只要有了“人”,就能干很多事情了,而不仅仅是一件事情。
对象和函数一样,是要写代码来获得的,那么怎么获得对象呢?
首先,我们要制作对象的模版,就是大家常说的类,他的作用就一个,制造对象。语法如下:
import pymysql
class MyDb:#定义类首字母尽量大写
name='liuchanng'#属性
def __init__(self,host,user,password,db,port=3306,charset='utf8'):#构造函数。不用调用,默认先执行
self.conn=pymysql.connect(host=host, user=user, password=password, db=db, port=port, charset=charset)
print('构造函数')
self.cur=self.conn.cursor()
def conn_mysql(self):
print('连接myql')
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('1')
self.cur.close()
self.conn.close()
my=MyDb('118.24.3.40','jxz','123456','*****')#实例化。这个叫做类的实例化。为什么叫实例化,因为对象也叫实例
#my就是实例,对象
res=my.execute_one('select * from app_myuser where username="testuser1";')
print(res)
这是啥呀,不就是把几个方法、几个变量组合到一起,然后起个名字吗?,然后mcb = Person(‘马春波’),就造出了一个对象。然后要这个对象干啥呢?self是什么?,且听下回。。
先看这个例子
class Person:
eyes='双眼皮'
mouths='樱桃'
def __init__(self,name):
print('开始造人')
name=name
print(id(self))
def cry(self,book):
self.vv='f'
self.book='e'
print('%s哭%s%s'%(self.book,self.vv,self.teach))
def say(self):
self.book='语文'
self.teach='niuniu'#
self.cry('zhu')
mcb = Person('马春波')
mcb.say()#
mcb.cry('e')
print(mcb.eyes)
这是一个简单的造人的类。造了一个对象,也就是实例化了一个变量mcb。mcb可以使用say方法,可以使用cry()方法,可以使用eyes和mouths。通过使用这些方法和属性来达到我们的目的。
关于self
self.某个变量,就表示对象可以使用这个变量,例如teach这个变量,执行了mcb.say(),say方法里有self.teach变量,而cry()方法没有,再执行cry()方法,却不会报错 因为mcb这个对象已经有了teach变量,值为niuniu。所以mcb使用cry方法不会报错。但是,如果mcb先调用cry方法会报错,因为mcb这个对象还没有teach变量。
#所以,对象可以说是一个有变量和方法的集合,是个整体。self就相当于对象的影子,快捷方式。
以上是新建类,以及实例化和对象是什么,可以干什么的基本知识。然后是继承,就是我再新建一个类并且声明我的父类是谁。这样,在这个类中就可以调用父类的方法,也可以在类中重写父类中的某个方法。语法如下:
(继承的好处到底是什么,我还没什么体会,后续再写)
class Lm:
money = 1000000
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()
类的私有方法和私有属性。都是两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用,即对象不能调用私有方法和私有属性。
class My:
def test(self):
self.__password = 123456
def say(self):
print('password',self.__password)
def __set_password(self):
self.__password = 7890
def update(self):
self.__set_password()
m = My()
m.test()
老师的笔记
面向对象编程:
类
一个种类、一个模型
实例、实例化、对象
实例、对象:
根据模型制作出来的东西。
实例化:
就是做东西的这个过程。
私有
方法
类里面的函数
属性
类里面的变量
构造函数
类在实例化的时候会自动执行的一个函数
析构函数
实例在销毁的时候自动执行的函数
self
代表的本类对象。
类变量:
就在直接在类下面定义的变量,没有加self的,每个实例都可以用
类方法:
1、不需要实例化就可以调用
2、它可以使用类变量
3、调用其他的类方法。
4、它不可以使用实例方法、实例变量
如果类里面的这个方法,它并没有使用到其他的实例变量、或者其他实例方法,那么就给他定义成类方法
静态方法:
1、不需要实例化就可以调用的
2、它就是一个定义在类里面的普通函数,不能使用实例变量、实例方法、不能使用类变量、类方法。
属性方法:
看起来像变量的一个方法。
实例变量:
self.xxx = xxx
加了self的变量才是实例变量,必须得实例化之后才可以使用
实例方法:
需要穿self的方法,都是实例方法,必须得实例化之后才可以使用
实例方法里面可以随便通过self来调用实例方法,类方法,静态方法,类变量。
私有:
变量、函数,前面加两个下划线就代表是一个私有的,只能在类里面用。
继承:
今天就到这,关于实例方法和类方法还需要再琢磨一下。类方法应该就是类中普通的方法,和静态方法的区别是静态方法不能使用类变量和类方法,就是类中普通的函数。实例方法是啥呢?