一、property 内置函数

装饰器的使用:所有的装饰器函数、方法、类的上一行直接@装饰器的名字

装饰器的分类:

① 装饰函数

② 装饰方法

③ 装饰类

property 是一个装饰器函数

@property 是装饰方法的,将一个方法伪装成一个属性,相当于调用方法是不需要加括号

class A:
def __init__(self,name):
self.__name = name @property
def name(self):
return self.__name a = A('小明')
print(a.name) '''
小明
'''

方法不能被删除,属性可以删除

property的作用:

  一个方法被伪装成属性之后,应该可以执行一个属性的增删改查操作,所有的操作方法必须更property修饰的同名

  增加和修改属性:使用setter装饰的方法,这个方法需要一个必传入的参数,用于私有变量的赋值

  删除属性:使用delete装饰的方法,这个方法并不是在执行是删除属性,而是del 属性的时候执行方法里的代码

class School:
def __init__(self,name):
self.__name = name # 定义私有属性 @property # 把方法装饰为属性
def name(self):
return self.__name @name.setter # 设置属性修改的方法,修改属性的值
def name(self,new_name):
self.__name = new_name @name.deleter # 设置删除属性执行的方法
def name(self):
print('不能删除啊!') harvard = School('哈佛')
print(harvard.name) # 获取属性的值
print(harvard.__dict__) # 获取对象的所有方法和属性
harvard.name = '北大' # 修改属性的值
print(harvard.__dict__)
del harvard.name # 执行被deleter的方法
print(harvard.__dict__) '''
哈佛
{'_School__name': '哈佛'}
{'_School__name': '北大'}
不能删除啊!
{'_School__name': '北大'}
'''

二、@classmethod

classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等

类方法的特点:

  使用类中的资源,而且这个资源可以直接用类名引用的使用,那这个方法就应该被改为一个类方法。

  类方法使用@classmethod 来修饰,类方法不涉及类对象的资源。

class England:
__city = 'London'
def __init__(self):
pass @classmethod # 使用类修改本类的静态属性
def change_capital(cls,city): # cls是类,类方法
England.__city = city print(England._England__city)
England.change_capital('Liverpool')
print(England._England__city) '''
London
Liverpool
'''

三、@staticmethod

staticmethod 返回函数的静态方法。

当一个在类中的普通方法不需要传入类和类对象,可以使用staticmethod修饰

class A:
@staticmethod
def func():
print('静态方法') A.func()

四、类的补充

类包含的内容:

① 静态属性  

调用者:类

特点:所有的对象都统一拥有的属性

② 类方法

调用者:类

特点:方法涉及到操作静态属性、类方法、静态方法

形参:cls 表示类

③ 静态方法

调用者:类

特点:普通方法,不使用类中的命名空间也不适用对象的命名空间,相当于一个普通的函数,没有默认参数

④ 方法

调用者:对象

形参:self 表示对象

⑤ property方法

调用者:对象

形参:self 表示对象

五、isinstance

检测对象与类的关系

isinstance() 与 tpye() 的区别:

type不接收继承关系,isinstance接收继承关系

type只能判断这个对象是哪个类创建出来的,isinstance能判断对象与类之间的继承关系

type相对精确,isinstance覆盖面广

class A:pass
class B(A):pass a = A()
b = B() print(type(b) is B)
print(type(b) is A)
print('---------------')
print(isinstance(b,B))
print(isinstance(b,A)) '''
True
False
---------------
True
True
'''

六、issubclass

检测类与类之间的关系,判断cls是否为cls的父类

使用:issubclass(子类,父类 )

class A:pass
class B(A):pass print(issubclass(A,B))
print(issubclass(B,A)) # 子类放在第一个参数 '''
False
True
'''

Python面向对象之进阶的更多相关文章

  1. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  2. 【转】python 面向对象(进阶篇)

    [转]python 面向对象(进阶篇) 上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 ...

  3. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  4. python 面向对象(进阶篇)转载武沛齐

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  5. 【Python之路】特别篇--Python面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  6. python 面向对象终极进阶之开发流程

    好了,你现在会了面向对象的各种语法了,  但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...

  7. python 面向对象 【进阶】

    多态 多态跟python没有太大关系,因为python本身原生支持多态. def func(arg):          #多态      print (arg) func(1) func(‘pand ...

  8. python面向对象【进阶篇】

    静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量 ...

  9. Python 面向对象的进阶

    类的成员 类的成员可以分为三大类 :  字段 , 方法 和  属性 注 :  所有的成员中,只有普通字段的内容保存对象中,  即 : 根据此类创建了对象,在内存就有多少个普通字段.  而其他的成员,则 ...

  10. python面向对象(进阶篇)

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员: 类的成员可以分为三大类:字段(变量).方法.属性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对 ...

随机推荐

  1. python web开发Django连接mysql

    需要MYSQL-python,一般情况下直接pip install window系统会报错,所以要去 https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml  ...

  2. xps转换为pdf

    https://www.cnblogs.com/zeoy/archive/2013/01/09/2852941.html https://blog.csdn.net/jafucong/article/ ...

  3. 继400G后,QSFP-DD800G会是下一个风口吗?

    数据中心市场作为光通信企业的主要战场,近三年400G的热度一直都在持续,虽有Facebook F16继续选用100G架构给市场泼了一些冷水等插曲存在,但近日随着阿里巴巴硅光400G QSFP-DD D ...

  4. 如何优雅的处理 async/await 异常

    参考链接:https://cloud.tencent.com/developer/article/1470715 参考链接:https://www.jianshu.com/p/2935c0330dd2

  5. 无聊的活动/缘生意转(2018 Nova OJ新年欢乐赛B题)解题报告

    题目2(下面的太抓 我重新写了个背景 其他都一样) 无聊的活动 JLZ老师不情愿的参加了古风社一年一度的活动,他实在不觉得一群学生跳舞有什么好看,更不明白坐在身后的学生为什么这么兴奋(看小姐姐),于是 ...

  6. mui弹出二维码示例

    <div id="tap_popover" class="box mui-popover mui-popover-action mui-popover-bottom ...

  7. ubuntu gcc 安装 使用

    "人多不足以依赖,要生存只有靠自己." -- 拿破仑 gcc是什么:-------------------------- Linux系统下的Gcc(GNU C Compiler)是 ...

  8. youku项目总结(粗略总结)

    一.ORM 之前我们都是以文件保存的形式存储数据,这次我们用的是数据库结合python使用,用到 ORM:关系型映射 类>>数据库的一张表 对象>>表一条记录 对象.属性> ...

  9. mininet安装配置

    mininet安装配置 安装mininet mininet使用 在VM中运行mininet 安装VMware,在VMware中打开下载好的mininet虚拟机映像 启动虚拟机,虚拟机的初始账号密码均为 ...

  10. 【mapreudce】6.对Nginx的access日志进行数据清洗,我们提取出文件数据的ip,时间,url

    1.首先我们需要一个util辅助类 package cn.cutter.demo.hadoop.mapreduce.nginxlog.util; import java.text.ParseExcep ...