python(面向对象-类封装调用)
- 面向对象编程是在面向过程编程的基础上发展来的,它比面向过程编程具有更强的灵活性和扩展性。
- 面向对象编程(Object-oriented Programming,简称 OOP),是一种封装代码的方法。其实,在前面章节的学习中,我们已经接触了封装
- 代码封装,其实就是隐藏实现功能的具体代码,仅留给用户使用的接口,就好像使用计算机,用户只需要使用键盘、鼠标就可以实现一些功能,而根本不需要知道其内部是如何工作的。
- 面向对象编程,也是一种封装的思想,它可以更好地模拟真实世界里的事物(将其视为对象),并把描述特征的数据和代码块(函数)封装到一起。
(2)为什么说”一切皆对象“
a = 2
print(id(a))
print(type(a))
b = 3
print(id(b))
print(type(b))
b = 2
print(id(b) #输出结果如下
1441688672
<class 'int'>
1441688704
<class 'int'>
1441688672
- 如上述代码中,实际上整形数据2、3其实都是 integer class(整形类的一个实例对象),而 a、b只不过是这些对象的一个标签,可以简单理解为2、3是两个人,而a、b分别是他们的名字。就算把3的名字给了2这个人,那2这个人也是不会变的。这里的变指的是他们在内存中的地址,也就是上面例子中的 id() 。
- 类:用来描述具有相同的属性和方法的对象的集合。可以理解是一个模板,通过它可以创建出无数个具体实例。
- 对象:类并不能直接使用,通过类创建出的实例(又称对象)才能使用。这有点像汽车图纸和汽车的关系,图纸本身(类)并不能为人们使用,通过图纸创建出的一辆辆车(对象)才能使用。
- 对象和类的关系:类和对象的关系就像模具和铸件的关系,类的实例化的结果就是对象,而对象的抽象体就是类。
- 属性:类中的所有变量称为属性。例如下面的 Student 类中的 self.name 和 self.score
- 方法:类中的所有函数通常称为方法。不过,和函数所有不同的是,类方法至少要包含一个 self 参数(后续会做详细介绍)。类方法无法单独使用,只能和类的对象一起使用。
class Student(object):
pass
class 后面紧接着是类名,即 Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用 object类,这是所有类最终都会继承的类。
- class定义类
- class 后面加 类名称 加 () 加 :
2.类名称定义规范:
- 不要以纯数字命名
- 不要以python中保留字符(关键字)来命名
- 不要以文件名命名
- 不能出现特殊字符
- 要简短且见名知义
- 当类名称中有多个单词时,应采用驼峰式(每个单词首字母大写) --> XinFangShuo()
定义好了 Student 类,就可以根据 Student 类创建出 Student 的实例,创建实例是通过类名+()实现的:
bart = Student()
可以看到,变量 bart 指向的就是一个 Student 的实例,而 Student 本身则是一个类。
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
注意:特殊方法“__init__”前后分别有两个下划线!!!
bart = Student('Bart Simpson', 59)
和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量 self,并且调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认
class Four(): #类的定义
def sub(self,x,y):
return x + y """
class Dog():
def __init__(self,name,age):
self.name = name
self.age = age def sit(self):
print (self.name.title() + ' ' + "is now sitting") def roll_over(self):
print (self.name.title() + ' ' + "is now roll over") my_dog = Dog('willie',6) #参数实例化
# your_dog = Dog('lucy',3)
my_dog.sit()
my_dog.roll_over()
""" """
class Four_operations():
def __init__(self,a,b):
self.a = int(a)
self.b = int(b)
def add(self):
return self.a + self.b def reduce(self):
return self.a - self.b def ride(self):
return self.a * self.b def Except(self):
return self.a / self.b operation = Four_operations('12','4')
print (operation.add())
print (operation.reduce())
print (operation.ride())
print (operation.Except())
"""
class ReadWrite():
"""
txt文件读取类
""" def __init__(self,filepath):
self.filepath = filepath def read(self,index=0):
with open(self.filepath) as book:
return book.read().splitlines()[index] def write(self,body):
with open(self.filepath,"w") as book:
book.write(body) ReadWrite("d:\\test1.txt").write("大家好,我是郑迎!")
print (ReadWrite("d:\\test1.txt").read())
#coding=utf-8 mysql = {"zhangsan":"","lisi":"","wangwu":""} class LoginRegister():
"""
登录注册函数封装实现如下:
1.登录mysql中的账号密码成功
2.密码错误则重新输入密码
3.账号错误调用注册方法进行注册,注册成功后调用登录方法登录已注册的账号
"""
def login(self):
user = input("username:")
if user in mysql.keys():
for i in range(3):
pwd = input("password:")
if pwd == mysql.get(user):
print ("Login ok")
break
else:
print ("密码输错三次,将锁定账号!")
else:
print ("Please register first!")
LoginRegister().register() def register(self):
user = input("Input you username:")
while True:
pwd = input("Input you password:")
repwd = input("Input you password again:")
if repwd == pwd:
mysql.setdefault(user,pwd)
print ("Register ok,sign in now!")
LoginRegister().login()
break
else:
print ("两次密码不一致,请重新输入!") LoginRegister().login()
- 当类中初始化方法__init__中存在参数时,则在实例化时,需要往实例括号中传入参数
- 当类中无初始化方法或者__init__中不存在参数时,则在实例化时,不需要往实例括号中传入参数,而在调用方法时再进行传参
class Four():
def sub(self,x,y):
return x + y print Four().sub(2,3) class Four_operations():
def __init__(self,a,b):
self.a = int(a)
self.b = int(b)
def add(self):
return self.a + self.b def reduce(self):
return self.a - self.b def ride(self):
return self.a * self.b def Except(self):
return self.a / self.b operation = Four_operations('','') #实例化
print (operation.add())
print (operation.reduce())
print (operation.ride())
print (operation.Except())
四、面向对象和面向过程
- 面向过程:吃(狗,屎)
- 优点:流程化,分步骤实现,效率高,代码短小精悍
- 缺点:思考难道大,代码复用率低,扩展差,难维护
def eat(dog,food):
return "{} love to eat {}.".format(dog,food) print(eat("XiaoHei","shit")) #结果如下
XiaoHei love to eat shit.
- 面向对象:狗.吃(屎)
- 优点:结构化,模块化,易扩展,可继承,可覆盖,易维护
- 缺点:程序臃肿,性能低
class Dog(): def eat(self,food):
return "Dogs love to eat {}.".format(food) print(Dog().eat("shit")) #结果如下
Dogs love to eat shit.
python(面向对象-类封装调用)的更多相关文章
- Python面向对象04 /封装、多态、鸭子类型、类的约束、super
Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...
- python 面向对象之封装与类与对象
封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...
- python: 面向对象:类和对象调用类中的变量和方法
一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...
- python 面向对象(类)
面向对象,即是将具备某种共性的事物抽象成一个类(模板),然后再根据类来创建实例对象进行具体的使用. 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写, ...
- python面向对象(封装、继承、多态)+ 面向对象小栗子
大家好,下面我说一下我对面向对象的理解,不会讲的很详细,因为有很多人的博客都把他写的很详细了,所以,我尽可能简单的通过一些代码让初学者可以理解面向对象及他的三个要素. 摘要:1.首先介绍一下面向对象 ...
- python面向对象编程 -- 封装、继承
面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...
- python面向对象(类和对象及三大特性)
类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- Python之路【第十一篇】:Python面向对象之封装
一 引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把青菜,土豆,花菜,还有苹果一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装=‘隐藏’,这种理解是相当片面的. 在面向对象中这个麻袋就是 ...
- python面向对象之封装,继承,多态
封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容.在python的类中,封装即通过__init__函数将数据赋给对应的变量进行保存,便于其他地方使用 所以,在使用面向对象的封装特 ...
随机推荐
- Python爬虫系列(三):requests高级耍法
昨天,我们更多的讨论了request的基础API,让我们对它有了基础的认知.学会上一课程,我们已经能写点基本的爬虫了.但是还不够,因为,很多站点是需要登录的,在站点的各个请求之间,是需要保持回话状态的 ...
- centos7.3下安装nginx
Nginx简介 Nginx是一款轻量级的Web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行.其特点是占有内存少,并发能力强, Nginx的并发能力在 ...
- 【Selenium06篇】python+selenium实现Web自动化:日志处理
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第六篇博 ...
- 挑战全网最幽默的Vuex系列教程:第二讲 Vuex旗下的State和Getter
先说两句 上一讲 「Vuex 到底是个什么鬼」,已经完美诠释了 Vuex 的牛逼技能之所在(纯属自嗨).如果把 Vuex 比喻成农药里面的刘备,那就相当于你现在已经知道了刘备他是一个会打枪的力量型英雄 ...
- App的数据如何用python抓取
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. App中的数据可以用网络爬虫抓取么 答案是完全肯定的:凡是可以看到的APP数 ...
- 1196F - K-th Path
题目链接: http://codeforces.com/problemset/problem/1196/F 题目大意::无向图,求任意两点第k短的路径 思路:按照边的大小,只保留前K个边,如果不连同的 ...
- notepad++批量每行加字符
移动光标到头 选择正则 输入^ 下面输入需要加的文本. 点替换
- vue2.x学习笔记(二十一)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12632730.html. 可复用性&结合-混入 基础 混入(mixin)提供了一种非常灵活的方式,来分发v ...
- Shellshock远程命令注入(CVE-2014-6271)漏洞复现
请勿用于非法用法,本帖仅为学习记录 shelshocke简介: shellshock即unix 系统下的bash shell的一个漏洞,Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全 ...
- PostMan接口测试(很全面的接口测试教程)
一:理论部分 1. 前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性.而这要求前端开发进度和后端进度保持基本一致,任何一方的进度跟不上 ...