Python面向对象之进阶
一、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面向对象之进阶的更多相关文章
- python面向对象编程进阶
python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...
- 【转】python 面向对象(进阶篇)
[转]python 面向对象(进阶篇) 上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(进阶篇)转载武沛齐
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- 【Python之路】特别篇--Python面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象终极进阶之开发流程
好了,你现在会了面向对象的各种语法了, 但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...
- python 面向对象 【进阶】
多态 多态跟python没有太大关系,因为python本身原生支持多态. def func(arg): #多态 print (arg) func(1) func(‘pand ...
- python面向对象【进阶篇】
静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量 ...
- Python 面向对象的进阶
类的成员 类的成员可以分为三大类 : 字段 , 方法 和 属性 注 : 所有的成员中,只有普通字段的内容保存对象中, 即 : 根据此类创建了对象,在内存就有多少个普通字段. 而其他的成员,则 ...
- python面向对象(进阶篇)
本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员: 类的成员可以分为三大类:字段(变量).方法.属性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对 ...
随机推荐
- pipline中使用ansible
实验架构: 192.168.0.96 gitlab 192.168.0.97 jenkins.ansible 192.168.0.98 harbor.docker集群 说明:下面代码编译镜像那一步的代 ...
- [转]Microsoft VS Code 改变默认文字编码
概要:文件->首选项->设置 输入: "files.autoGuessEncoding": true, 然后勾上. 链接地址:https://jingyan.baidu ...
- PHPStudy后门事件分析
PHP环境集成程序包phpStudy被公告疑似遭遇供应链攻击,程序包自带PHP的php_xmlrpc.dll模块隐藏有后门.经过分析除了有反向连接木马之外,还可以正向执行任意php代码. 影响版本 P ...
- VueX(vue状态管理)简单小实例
VueX:状态管理 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 核心模块:State. ...
- linux 下修改时间
修改linux的时间可以使用date指令 date命令的功能是显示和设置系统日期和时间. 输入date 查看目前系统时间. 修改时间需要 date -功能字符 修改内容 命令中各选项的含义分别为: - ...
- Ajax基本概念
一. Ajax 1. 什么是ajax Ajax: asynchronous javascript and xml (异步js和xml) 其是可以与服务器进行(异步/同步)交互的技术一. ajax ...
- 个人PC电脑 关闭网卡自启
前言: 今早我打开我的电脑,惊呆了.出现了以下字样: This Product is covered by one or more of the following patents ... 看了BIO ...
- git当前项目免密提交
在项目目录下,执行: vim .git/config 在url后边添加用户名密码即可 ``` [core] repositoryformatversion = filemode = true bare ...
- 021 Android 查询已经导入到工程中的数据库+抖动效果
1.将数据库(.db)文件放入工程中 在project状态下,新建assets文件夹,并将数据库文件放入assets目录下. 注意:assets目录.java目录.res目录是同级的 new---&g ...
- [转帖]JAVA虚拟机和安卓虚拟机的区别
作者:天光链接:https://www.zhihu.com/question/20207106/answer/14654536来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...