python基础:面向对象
一、定义
面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用
类:一个种类,一个模型。
对象:指具体的东西,模型造出来的东西叫做对象。
实例:实例和对象是一样的。
实例化:实例化就是造东西的这个过程。
属性:就是变量
方法:就是类里面的函数
类的定义:
class Person: #类
def __init__(self):#构造函数
self.name = 'zhang'
self.nose = 2 # #公有属性 def driver(self):#方法
print('老司机,开车非常稳') p=Person()#实例化,p就是实例即对象
print(p.name)#实例化对象可调用类的公共属性
p.driver()#实例化对象可调用类的公共方法
二、构造函数:
__init__(self) 这个是构造函数。可写可不写。当类实例化的时候,最先执行构造函数。构造函数也可带参数。如果构造函数带参数,则在实例化的时候,就要带参数
class Person: #类
def __init__(self,age):#带参数的构造函数
self.name = 'zhang'
self.nose = 2 # #公有属性
self.age=age
p=person(18)#实例化,必须将age的值带过去
print(p.age)#打印18
三、self
self代表的是本类对象。因为函数里面的变量都是局部变量,出了函数就不能用了。
用self给对象绑定了之后,就可以self.xx随便用了
class Person: #类
def __init__(self,age):#带参数的构造函数
self.name = 'zhang'
self.nose = 2 # #公有属性
self.age=age
def haha(self):
print(self.nose)#可直接用self.nose使用构造函数中的变量,会打印出2 p=Person(18)
四、私有属性和方法
私有属性和方法的定义,在前面加上两个横。私有属性和方法只能在类内部调用。出了类体就不能再调用
class Person: #类
def __init__(self):#构造函数
self.name = 'zhang'
self.nose = 2 # #公有属性
self.__ear=2#私有属性,变量前加__ def driver(self):#方法
print('老司机,开车非常稳')
def __eat(self):#私有方法
print('吃。。。。。。。。。') p=Person()#实例化,p就是实例即对象
print(p.__ear)#报错
p.__ear()#报错,私有方法只在类内有效,出了类就无法调用
五、属性方法
看起来像属性的方法。跟普通方法的区别:在方法前加上@property。调用的时候像调用属性一样,不用加括号
class Baby():
#没有构造函数
def my(self):
self.name = 'aaa'
def cry(self):#实例方法
print('哇哇哇') @property#属性方法
def hhh(self):
return 198
b=Baby()
b.cry()
print(b.hhh)#属性方法的调用跟调用属性一样,方法名后不加括号
六、类变量
可以直接通过类名来引用并操作的变量。实例也可引用操作,但是实例并不是实际改变类变量的值
类变量直接在类内部定义(不要定义到函数体中)
class Baby():
country = 'China' #类变量,公共的变量,每个实例都可以用
def my(self):
self.name = 'aaa'
def cry(self):#实例方法
print('哇哇哇')
print(self.country)#函数调用类变量时,要用self.xxx
b=Baby()
b.country='zhongguo'#实例对象修改类变量的值
print(b.coutry)#打印出zhongguo
print(Baby.country)#类直接调用类标量,仍旧是原值china,并没有改变
Baby.country='japan'#类变量可通过 类.xxx=xx修改
print(Baby.country)#打印出japan
七、类方法
类方法不仅可以直接用实例调用,也可以直接用类名调用。类方法的定义需要在普通方法前加上@classmethod
class Baby():
country='china'#类变量,公共变量,所有实例化对象都可用
# def __init__(self):#构造函数不是必须写的
# print(id(self))
# self.name=name
def cry(self):#带self的方法,叫实例方法.必须先实例化后才能调用
print('哇哇啊啊')
print(self.xiaoming())#调用类方法时,必须用self.xxx @property#加上这句,将函数定义为属性方法,当做变量用。不能加入参
def hhh(self):
return 198 @classmethod
def xiaoming(cls):#cls代表本类,这个是类方法
print(cls.country)
print('我是类方法') b=Baby()
b.xiaoming()#实例对象调用类方法
Baby.xiaoming()#类名直接调用类方法
八、静态方法
#静态方法就是一个普通的函数,只不过就是写在类中,不能用类变量,类方法,也用不了实例方法,实例变量。。静态方法的定义在普通方法前加上@staticmethod
class Byby():
@staticmethod
def xiaohei():
print('这个是静态方法,它和一个没卸载类里面的函数一样')
九、析构函数
析构函数在实例销毁时执行,一般用作最后的善尾工作。比如在数据库操作中,可以将关闭操作都放在析构函数中,当程序全部执行的时候,会自动地执行析构函数,将数据库连接关闭
析构函数也是非必写
import pymysql
class MyDb(object):
def __del__(self):#析构函数不是必写的
#析构函数
self.cur.close()#将数据库关闭操作放在析构函数。在程序执行完毕后,会执行析构函数
self.conn.close()#
print('over....') def __init__(self,host,user,password,db,port=3306,charset='utf8'):
try:
self.conn=pymysql.connect(host=host,user=user,password=password,port=port,charset=charset,db=db,autocommit=True)
#autocommit 在执行insert,update,delete语句时可以自动提交commit
except Exception as e:
print('数据库连接失败%s'%e)
else:
self.cur=self.conn.cursor(cursor=pymysql.cursors.DictCursor) def ex_sql(self,sql):
try:
self.cur.execute(sql)
except Exception as e:
print('sql语句有问题%s'%sql)
else:
self.res=self.cur.fetchall()
return self.res my=MyDb('127.0.0.1','root','','db')
my.ex_sql('select * from stu;')
print('最后一行......')#程序自上向下执行,这一行代码执行完毕后,程序结束,此时就会执行析构函数 #所以最终会看到打印结果中显示:
最后一行......
over......
十、if __name__ == '__main__':
作用:
1、判断这个python文件是在别的地方导入的,还是直接运行这个python文件
2、这句话一般是做测试的时候用的,直接执行该句话所在的文件,加与不加没有任何区别
3、但是如果在别的文件import该文件,则main下的所有代码不会被执行
假设文件aa.py中代码如下:
print(__name__)#直接执行该文件,会打印出__main__。但是如果在别的文件import该文件,这句话回打印出当前文件的文件名
if __name__ == '__main__':# 直接运行当前python文件,main 写这里并没有什么用。写与不写一样#但是如果在别的python中导入当前python文件,那么main下的代码不会被执行
print('测试。。。。。。。。')
以上代码,如果直接运行所在py文件,则会打印出:
__main__
测试。。。。。。
如果在文件b.py中import aa.py,执行结果:
aa #直接打印出aa.py的文件名。同时不会执行if__name__=='__main__' 下的代码
十一、经典类和新式类区别
#经典类和新式类在python2中有区别,在python3中没有任何区别
#python2中,在多继承时,一个是深度优先,一个是广度优先
python基础:面向对象的更多相关文章
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- python基础——面向对象进阶下
python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...
- python基础——面向对象进阶
python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...
- python基础——面向对象的程序设计
python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
- Python 基础 面向对象之二 三大特性
Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...
- python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)
python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...
- Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础
本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 类的特殊方法 1.3 反射 2. 异常处理 3. Socket开发基础 1. ...
- python基础-面向对象编程
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...
- 第八章:Python基础の面向对象(二)
本課主題 面向对象的多态 面向对象的成员 成员修饰符 特殊成员 面向对象其他应用 异常处理 设计模式与单例模式 面向对象的多态 指定参数类型只是多态的一种表现 另外一种是允许自己类型和自己的子类型(典 ...
- python基础-面向对象(装饰器)
属性: @property @method_name.setter @method_name.deleter 三个标签都是放在方法的上面来使用,且方法名要和后续使用的 变量名字相一 ...
随机推荐
- 详解POW工作量证明原理
原文地址 来自 微信公众号 区块链大师 POW工作量证明(英文全称为Proof of Work)早在比特币出现之前就已经有人探索,常见的是利用HASH运算的复杂度进行CPU运算实现工作量确定,当然你 ...
- Js~对键值对操作
键值对主要是面向对象语言里的字典,或者叫哈希表,它通过键(key)可以直接访问到值(value),所以它查找的时间复杂度是O(1),即一次查找即可找到目标:在.net里有Dictionary,而在ja ...
- 第一次使用Git Bash Here 将本地代码上传到码云
当我们安装成功git工具时候,初次使用Git时,需要Git进行配置. 1.点击桌面上的这个图标,打开Git Bash:如图所示 2.配置自己的用户名和邮箱 git config --global us ...
- Go热门开源项目大全
监控系统 项目 简介 Star数 grafana/grafana Grafana 是一个用于监控指标分析和图表展示的工具, 后端支持 Graphite, InfluxDB & Promethe ...
- 运放引脚悬空危害大,单片机PWM信号进入运放需要考虑避免运放引脚悬空
1 问题电路 在没有烧录程序时,单片机的PWM引脚无信号,导致运放的3脚悬空,从而导致运放输出3.5V电压,从二导致后面驱动电流非常大,容易对驱动器件造成损坏 2 改进电路 通过在单片机输出增加下拉电 ...
- 为创建Golang GUI程序选择合适的库
我认为在Go语言中创建GUI只有两种相对较好的方式,一是Qt,二则是Electron. 如何选择? 这要看你的需求.如果你会HTML+CSS+JavaScript,只想使用Go开发对性能没有多高的程序 ...
- 【算法•日更•第三十七期】A*寻路算法
▎写在前面 这是一种搜索算法,小编以前总是念成A乘寻路算法,没想到一直念错. 请大家都念成A星寻路算法,不要像小编一样丢人了. ▎A*寻路算法 ☞『引入』 相信大家都或多或少的玩过一些游戏吧,那么游戏 ...
- MySql安装后在服务管理器里边找不到MySql服务项的解决办法(win10)
问题描述: 成功安装MySql后,使用mysql的时候,在CMD中输入net start mysql,提示服务名无效,查看服务列表也找不到mysql服务. 解决办法: 首先用管理员身份打开CMD命令, ...
- Host 'controller' is not mapped to any cell
问题: Host 'controller' is not mapped to any cell 解决: 执行:nova-manage cell_v2 simple_cell_setup 再次检查:
- superslide滚动插件使用记录-产品滚动-图片滚动
在用wordpress制作一个企业网站时,用到了这个superslide的滚动插件,用于案例.证书等滚动效果.该插件网站在这里:http://www.superslide2.com/ 我所使用的wor ...