Python有两种编程方式:函数式+面向对象

函数式编程可以做所有的事情,但是否合适?

面向对象:

一、定义

  函数:

    def + 函数名(参数)

  面象对象:

    class  bar--->  名字叫bar的类

       def  --->类中的函数叫方法

二、执行

  函数:

    函数名(参数)

  面向对象:

    obj = Bar()  #创建中间人(对象、实例)

    obj.foo

定义类并执行类中的方法:

class 类名:  #类名后面没有括号

  def 方法名(self,args)

    print(args)

中间人 = 类名( )

中间人.方法名(1111)

class bar:    #类名后面没有括号
def foo(self,args):
print(args) obj = bar() #定义对象的时候需要加括号
obj.foo('this is the test')

类里面的方法也有return值

类对象指针

self

self代指,调用方法的对象(中间人)

构造方法:

特殊作用:

  在执行obj = 类名()时,一共做了两件事:

    1、创建对象

    2、通过对象执行类中的一个特殊方法(构造方法)

面象对象的三大特性之一:封装

利用构造方法将值封装到对象中去。

class person:
def __init__(self,name,age):
"""
构造方法,构造方法的特性,类名()自动执行构造方法
:param name:
:param age:
"""
self.n = name
self.a = age
def show(self):
print('%s-%s'%(self.n,self.a)) #格式化字符,%s一定是要放在字符串中 lihuan = person('李欢',18)
lihuan.show()

面向对象编程适用场景:

  如果多个函数中有一些相同参数时,转换成面向对象

面象对象三大特性之二:继承

class F:    #父类,基类
def f1(self):
print("F.f1")
def f2(self):
print("F.f2") class S(F): #子类,派生类,定义子类的时候后面要加括号,括号中写上父类名称
def s1(self):
print("S.s1") s = S()
s.s1() #方法后面有括号,s1中的self是形参,此时代指s
s.f1()  #self用于指调用方法的调用者
#如果不想继承父类中的方法怎么办?(自己定义一个一样的方法,也叫重写)
class F: #父类,基类
def f1(self):
print("F.f1")
def f2(self):
print("F.f2") class S(F): #子类,派生类
def s1(self):
print("S.s1")
def f2(self):
print("S.f2") obj = S()
obj.s1()
obj.f2() #此时调用的就是S中的f2方法,父类的同名方法不执行
#如果既想调用自己的f2,又想调用的父类的f2,怎么办?
class F: #父类,基类
def f1(self):
print("F.f1")
def f2(self):
print("F.f2") class S(F): #子类,派生类
def s1(self):
print("S.s1")
def f2(self):
super(S, self).f2() #执行父类中f2方法的第一种方式,括号内为固定格式,这里不仅仅可以用此方式调用f2,也可以调用f1
F.f2(self) #执行父类中f2方法的第二种方式,括号里的self一定要加,建议用第一种
print("S.f2") obj = S()
obj.f2() #如果想执行自己和执行父类的顺序改变一下,定义方法的时候改变一下顺序就OK了

在Python中支持多继承,查找顺序如下:

1、左侧优先

2、一条道走到黑

3、如果有同一个根时,根最后才执行

class RequestHandler():
def serve_forever(self):
print('RequestHandler.serve_forever')
self.process_request() #执行这个的时候,还是从原点开始找
def process_request(self):
print('RequestHandler.process_request') class Minx():
def process_request(self):
print('Minx.process_request') class son(Minx,RequestHandler):
pass obj = son()
obj.serve_forever()

由于实例化的时候会自动执行__init__方法,所以如果实例化的类中没有__init__方法,它也会按照上面的方法去寻找,这一点一定要注意,因为这是自动执行的,所以很容易被忽略。

面向对象三大特性之三:多态

------------------->>>>Python原生就是多态的。

类成员:

  -字段

  -方法

  -属性

字段:

  普通字段,保存在对象中,只能通过对象访问

  静态字段,保存在类中,可以通过对象访问,也可以通过类访问

class province:
#静态字段,属于类,可以通过类访问,也可以通过对象访问
country = '中国'
def __init__(self,name):
#普通字段,属于对象,只能通过对象访问
self.name = name print(province.country) #中国
hebei = province('河北')
print(hebei.name) #河北
print(hebei.country) #中国,静态字段是可以通过对象访问的

方法:

  普通方法,保存在类中,由对象来调用,self是对象

  静态方法,保存在类中,由类直接调用,不用self参数

  类方法,保存在类中,由类直接调用,cls是当前类

class Foo:
def bar(self):
print('bar') @staticmethod #静态方法加的装饰器
def sta(a1,a2): #静态方法中括号内不用加self,可以没有参数,也可以设定其它参数,这样的话,类在调用方法的时候,就不用传参数了,这样就不用创建对象,就可以直接调用方法
print(a1,a2) @classmethod #类方法
def classmd(cls): #这个cls和self一样,python都会自动传
print('classmd') obj = Foo()
Foo.bar(obj) #这是类调用方法的,需要加参数self,所以必须要创建对象才行 Foo.sta(1,2) Foo.classmd()

####### 应用场景:

  如果对象中需要保存一些值,执行某功能时,需要使用对象中的值----->普通方法

  不需要任何对象中的值,静态方法

class Foo:
@property #创建属性(特性)
def per(self):
print('') obj.per #虽然是方法,但执行的后面却不加括号
class Foo:

    @property
def per(self):
return 1 @per.setter
def per(self,val): # 这块的函数名必须和上面装装饰器的名称一致,不然报错。Names of function and decorator don't match
print(val) @per.deleter
def per(self):
print(666) @per.getter
def per(self,val):
print(val) obj = Foo()
res = obj.per
print(res) # obj.per = 100 # del obj.per #

Python:Day24 类、类的三大特性的更多相关文章

  1. Python 基础 面向对象之二 三大特性

    Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...

  2. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  3. 百万年薪python之路 -- 面向对象之三大特性

    1.面向对象之三大特性 1.1封装 封装:就是把一堆代码和数据,放在一个空间,并且可以使用 对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封 ...

  4. python学习之对象的三大特性

    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...

  5. day24——面向对象三大特性、鸭子类型、类的约束、super的深度解析

    day24 面向对象的三大特性 继承.封装.多态 封装:把一堆东西(代码,数据)放到一个地方(空间),并且可以使用 class Student: def __init__(self, name, se ...

  6. Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)

    概念:                                                                                                 ...

  7. python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试

    一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...

  8. python面向对象(类和对象及三大特性)

    类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态   面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  9. Python面向对象之:三大特性:继承,封装,多态以及类的约束

    前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情 ...

随机推荐

  1. Java io 入门

    目录 前言 代码演练 字符流 FileReader,FileWriter: BufferedReader,BufferedWriter: InputStreamReader,OutputStreamW ...

  2. 记录使用Redis和nginx 实现一个简单的负载均衡(FB)

    这两年在博客园看了不少大牛的分享,一直打算能写点什么东西. 之前偶然看见一个利用Redis 当作 Session数据宿主的demo,出处我已经找不到了.后来没事看了看nginx相关的东西.其中负载均衡 ...

  3. CSS背景和CSS列表

    ------------------------------ div{            background: red;            width: 300px;            ...

  4. 原生JS实现随着鼠标滚动到元素位置触发对应css3动画,简单易用滚动监测

    预览链接:http://www.vanwee.cn/%E6%BB%9A%E5%8A%A8%E7%9B%91%E5%90%AC/ <style> body{overflow-x: hidde ...

  5. 如何去除vue项目中的 # --- History模式

    来自:https://www.cnblogs.com/zhuzhenwei918/p/6892066.html 侵删 使用vue-cli搭建的环境,在配置好路由之后,可以看到下面的情况: 但是不难发现 ...

  6. jQuery与JS中的map()方法使用

    1.jquery中的map()方法 首先看一个简单的实例: $("p").append( $("input").map(function(){ return $ ...

  7. HDU 1527 取石子游戏(威佐夫博弈)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  8. ACL技术总结

    1.ACL的全称是访问控制列表,本质上是定义一组策略,以便指导报文在交换机内部的转发行为. 2.要配置策略,首先要明确ACL应用的对象,可以是针对端口,也可以是针对特殊的一条流. 针对端口,就是指端口 ...

  9. iOS------自动查找项目中不用的图片资源

    注意:删除的时候要谨慎!别什么图都删了,看看对项目有没有作用.这个插件有时也会有一定的误差. 具体操作步骤: 1.去github上下载LSUnusedResources(下载地址:https://gi ...

  10. JMeter http(s)请求插件jmeter-plugin-httpBinaryFileUpload.jar

    JMeter http(s)请求插件jmeter-plugin-httpBinaryFileUpload.jar   by:授客 QQ:1033553122 1. 测试环境 apache-jmeter ...