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 类的成员.成员修饰符.类的特殊成员. 类的成员: 类的成员可以分为三大类:字段(变量).方法.属性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对 ...
随机推荐
- C#中,子线程与主线程之间的通信是如何实现(转)
注: 项目中按照这个方法调试成功: 通常我们会有这种需求: 一个支持慢速设备的处理类,如网络通信.串口通信.打印等 此时经常需要将线程封装在类里面,让类支持异步处理,然后发布事件或者回调委托通知主线程 ...
- CSS3 mask 遮罩蒙版效果
mask demo效果演示:http://dtdxrk.github.io/game/css3-demo/mask.html mask 的属性: -webkit-mask-image:url | gr ...
- stochastic noise and deterministic noise
在机器学习中,导致overfitting的原因之一是noise,这个noise可以分为两种,即stochastic noise,随机噪声来自数据产生过程,比如测量误差等,和deterministic ...
- 【转】JS中处理Number浮点数精度问题
https://github.com/dt-fe/number-precision ~(function(root, factory) { if (typeof define === "fu ...
- 033 Android App启动的闪屏效果+新手向导(多个图片滑动效果)+ViewPager使用
1.目标效果 App启动时,出现闪屏效果(利用动画实现). App新手使用时,会出现新手向导效果. 2.XML页面布局 (1)闪屏页面 <?xml version="1.0" ...
- spring boot datasource 参数设置
datasource spring.dao.exceptiontranslation.enabled是否开启PersistenceExceptionTranslationPostProcessor,默 ...
- 用 Python 把微信小程序的二维码转化成图片
官方文档 import cString import requests from tornado.web import authenticated, RequestHandler URL = 'htt ...
- C 语言字符串的比较
C 语言字符串的比较 #include <stdio.h> #include <Windows.h> #include <string.h> int main(vo ...
- 通用32位CPU 常用寄存器及其作用
目录 32位CPU所含有的寄存器 数据寄存器 变址寄存器 指针寄存器 段寄存器 指令指针寄存器 标志寄存器 32位CPU所含有的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针 ...
- 如何实现在H5里调起高德地图APP
这一篇文章将告诉您,如果直接打开高德地图APP,并展示路线规划.适合有定位的移动设备,可以查询到从“我的位置”到目的地的路径规划,并直接导航. 场景二.调起高德地图的路线规划功能 导航是目前JSAPI ...