python进阶01 面向对象、类、实例、属性封装、实例方法

一、面向对象

  1、什么是对象

#一切皆对象,可以简单地将“对象”理解为“某个东西”
#“对象”之所以称之为对象,是因为它具有属于它自己的“特征”和“行为”

  2、面向过程和面向对象

#面向过程指的是变量和函数。“散落”在各种文件中,或者在文件的各个位置,相互没有联系,函数与变量没有相关性,非常不利于维护,设计模式不清晰。
#为此才有面向对象概念的诞生。
#面向对象指的是相关的变量和函数都“封装”在对象里面,以对象为单位来管理代码。好处在于变量和函数的相关性清晰,便于维护,设计模式也比较清晰;程序员可以配合“继承”来提高代码的可重用性,加强合作开发。
#面向对象:就是从事物的内部联系,与事物与事物间的外部联系来考虑我们的代码设计的

二、类和实例

#类与实例,是现实对象在代码中的体现,它们也提供了专门的变量空间

  类和实例都是对象

  1、类和实例的区别

#类:是一类事物的抽象概念,不是真实存在的,描绘的是这类事物的共性,例如人、动物、家具。
#实例:某类事物的具体个体,是该类事物的具体表现,它是具体存在的,例如tuple老师是人中的一个,加菲猫是猫中的一种。

  2、创建类,实例

class Person: #创建一个名字叫人的类
pass #占位符 p=Person() #创建实例p,实例出一个具体的人(类的实例化)

  3、如何确定类和实例之间的关系

    利用isinstance判别函数

class Person:
pass class Dog:
pass p1=Person() #p1,p2是人类
p2=Person()
P3=Dog() #p3是狗类 print(p1 is p2) #False ,p1,p2虽然都是人类,但是p1不等同于p2 print(isinstance(p1,Person)) #True,判断p1是不是人类
print(isinstance(p2,Dog)) #False,判断p2是不是狗类
print(isinstance(p3,(Person,Dog))) #True,判断p3是不是属于人类或狗类,符合一种就是True

三、属性封装

#属性表示的是实例的特征,通常标识了一个实例,因此通常存在于实例中

  类和实例都是独立存放变量的空间

  1、运算符 “.”

    用于进行变量空间的运算

class Person:
var1='变量1'
print(Person.var1) #输出直接封装在类中的变量var1(变量1) Person.var2='变量2'
print(Person.var2) #输出后来封装在类中的变量var2(变量2) p=Person() #类的实例化
print(p.var1) #虽然实例p中找不到var1,但根据属性查找规则,在Person类中能够找到,所以仍然能够寻找到var1
print(p.var2) #属性查找规则:查找变量->在实例中查找-->1、找到了,就可输出;2、找不到,转到类中查找变量

  2、实例是一个独立存放变量的空间

class Person:
pass p1=Person()
p2=Person()
p1.var='变量1'
print(p1.var) #输出变量
print(Person.var) #AttraribileError,类中间找不到,不会转到实例中去找
print(p2.var) #p2中找没有,转到Person中去找也没有

  一个实例的“特征”,就是“属性”

四、实例方法

#实例方法是一个类中所有实例公共的行为。因此,通常不会在每个实例中存放一个,而是存在与类中

  1、什么是实例方法

    封装在类中的一种特殊的函数

class Person:
def fun():
print('做些什么')
Person.fun() p=Person()
p.fun() #TypeError,多传入一个参数
class Person:
def fun(self):
print('参数',self)
Person.fun('直接通过类调用') p=Person()
print(p)
p.fun() #默认传入了p这个实例本身

    实例方法就是实例的行为

class Person:
def eat(self):
print('{name}eating...'.format(name=self.name)) p1=Person()
p1.name='Tuple'
p2=Person()
p2.name='Budong' p1.eat()#相当于Person.eat(p1),就是直接传入了p1这个参数
p2.eat() # 将name变量与eat函数这两个相关对象通过封装深度的绑定在了类和实例中

    实例方法的调用过程与self

#  实例.方法(参数) -->类.方法(实例,参数) 就是直接将实例传入了函数
# 通常,将默认会传入的那个参数命名为self,用来表示调用这个方法的实例对象本身
#方法总是定义在类中,但却叫“实例方法”,因为它在该类所有实例缩共有的行为

四、作业

  设计一个银行业务相关的简单程序,让它具有:1、创建账户;2、存款;3、提款;4、展示子账户信息等基本功能

#首先,我们用面向过程的方法来做
def account(name,number,balance): #创建账户函数,将输入的账户名,账号,余额返回到一个字典
return {'name':name,'number':number,'balance':balance} def deposit(acct,amount): #存款函数
if amount<=0:#存款数为负数不得进行存款
print('余额不得负数')
else:
acct[balance]+=amount #利用字典完成存款 def withdraw(acct,amount): #取款函数
if amount>acct[balance]:
print('取款额不得大于余额')
else:
acct[balance]-=amount def desc(acct): #查询函数
return '{name}:{balance}'.format(name=acct[name],balance=acct[balance])#返回一个账户名和余额的字符串
#用“类”来代替没有语义的“字典”
class Account:
pass def account(name,number,balance):
acct=Account()
acct.name=name
acct.number=number
acct.balance=balance
return acct def deposit(acct,amount): #存款函数
if amount<=0:#存款数为负数不得进行存款
print('余额不得负数')
else:
acct.balance+=amount #利用实例完成存款 def withdraw(acct,amount): #取款函数
if amount>acct.balance:
print('取款额不得大于余额')
else:
acct.balance-=amount def desc(acct): #查询函数
return '{name}:{balance}'.format(name=acct.name,balance=acct.balance)#返回一个账户名和余额的字符串
#既然如此,为啥不直接放到类里面呢,这便是用过“面向对象”的思路来设计
class Account: def account(self,name,number,balance):
self.name=name
self.number=number
self.balance=balance
return self def deposit(self,amount): #存款函数
if amount<=0:
print('余额不得负数')
else:
self.balance+=amount def withdraw(self,amount): #取款函数
if amount>acct.balance:
print('取款额不得大于余额')
else:
self.balance-=amount def desc(self): #查询函数
return '{name}:{balance}'.format(name=self.name,balance=self.balance)

python进阶01 面向对象、类、实例、属性封装、实例方法的更多相关文章

  1. Python的类实例属性访问规则

    一般来说,在Python中,类实例属性的访问规则算是比较直观的. 但是,仍然存在一些不是很直观的地方,特别是对C++和Java程序员来说,更是如此. 在这里,我们需要明白以下几个地方: 1.Pytho ...

  2. Python进阶(十三)----面向对象

    Python进阶(十三)----面向对象 一丶面向过程编程vs函数式编程vs面向对象编程 面向过程: ​ 简而言之,step by step 一步一步完成功能,就是分析出解决问题所需要的步骤,然后用函 ...

  3. Python 进阶_OOP 面向对象编程_组合与继承

    #目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...

  4. Python进阶:函数式编程实例(附代码)

    Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...

  5. Python 进阶_OOP 面向对象编程_实例属性和方法

    目录 目录 构造器和解构器 构造器 __init__ 真构造器 __new__ 解构器 __del__ 实例方法 Python 中的 抽象方法 实例属性 查看实例属性 实例属性和类属性的区别 访问不可 ...

  6. Python 进阶_OOP 面向对象编程_类属性和方法

    目录 目录 类属性 调用类属性 查看类属性 特殊的类属性 类方法 真构造器 __new__ 类属性 在理解类属性之前要先搞清楚 实例属性 和 函数属性 之间的区别: 1. 实例属性:指的是实例化类对象 ...

  7. Python实用笔记 (22)面向对象编程——实例属性和类属性

    由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(se ...

  8. Python中级 —— 01面向对象进阶

    面向对象进阶 总结.补充(http://blog.csdn.net/fgf00/article/details/52479307) 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 ...

  9. Python 进阶_OOP 面向对象编程_类和继承

    目录 目录 类 最简单的类 类方法 构造器 __init__ 创建一个类 实例化一个对象 调用实例的方法和属性 创建子类 使用 super 来调用父类的构造器 实例化子类对象 调用子类的属性和方法 类 ...

随机推荐

  1. Css公共文件结构

    一般一个网站会有这么三个样式: global.css | reset.css(格式化样式) common.css(公共组件样式) layout.css(当前页面样式) 清除全站所有页面的浏览器默认样式 ...

  2. Linux 查看并删除.svn目录

    1. find . -type d -name ".svn"|xargs rm -rf

  3. Unity 官方自带的例子笔记 - Space Shooter

    首先 买过一本叫 Unity3D开发的书,开篇第一个例子就是大家经常碰见的打飞机的例子,写完后我觉得不好玩.后来买了一本 Unity 官方例子说明的书,第一个例子也是打飞机,但是写完后发现蛮酷的,首先 ...

  4. Nginx HTTP Server相关

    一.Nginx安装: 采取手动编译安装 对多种重要的选项进行配置 安装前提:常用工具和库,GCC PCRE(Rewrite模块需要) pcre-devel(源码) zlib zlib-devel(源码 ...

  5. ACM学习历程—FZU 2140 Forever 0.5(计算几何 && 构造)

    Description   Given an integer N, your task is to judge whether there exist N points in the plane su ...

  6. Tomcat加载servlet类文件

    问题1:tomcat什么时候加载servlet? 有两种情况 一种是启动时加载 一种是请求时加载 第一种是在web.xml中的<servlet>节点下增加类似:<load-on-st ...

  7. 使用Netty实现的一个简单HTTP服务器

    1.HttpServer,Http服务启动类,用于初始化各种线程和通道 public class HttpServer { public void bind(int port) throws Exce ...

  8. WPF DelegateCommand CanExecute

     private DelegateCommand searchCommand;         public DelegateCommand SearchCommand         {       ...

  9. RT-Thread信号量使用(动态/静态信号量) 及 信号量的四种使用场合

    信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用.在进入一个关键代码段之前,线程必须获取一个信号量:一旦该关键代码段完成了 ...

  10. 三 Flask+ MySQL 数据库操作

    一: __init__.py作用: __init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件.通常__init__.py ...