一、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. Linux系统调优——网络(四)

    (1).查看网络(Network)运行状态相关工具 1)nload监控总体带宽使用情况 nload需要自己安装,而且在安装前需要安装epel-release [root@youxi1 ~]# yum ...

  2. iOS实现简单时钟效果

    实现的效果图如下 : 实现代码如下: #import "ViewController.h" //将旋转角度转换为弧度制#define angleToRadion(angle) (( ...

  3. replicationController 使用

    [root@lab2 nginx-harbor]# cat http-test.yaml apiVersion: v1 kind: ReplicationController metadata: na ...

  4. WebException 请求被中止: 操作超时

    HTTP 请求时出现 :WebException 请求被中止: 操作超时 处理HTTP请求的服务器 CPU 100% ,重启后正常.

  5. websockify文档

    一.官网地址 地址:https://github.com/novnc/websockify 二.开启代理 1.单台服务器 python /usr/local/websockify/websockify ...

  6. qt linux下自动检测U盘热插拔

    如果用U盘来更新软件,需要先删除当前的可执行文件,但是如果删除之后,复制失败的话会导致后续没有文件可以运行了.一个方法是将新的可执行文件放到另一个目录中,当copy成功后修改linux的启动文件,然后 ...

  7. spring boot配置文件application.properties配置JPA以及数据源

    1.application.properties配置jpa模板 spring.datasource.url=jdbc:mysql://localhost:3306/springboottest?use ...

  8. Redis的安装(windows)

    一.安装redis windows版本的下载在https://github.com/MicrosoftArchive/redis/tags msi是安装版,zip的解压就能用.建议下msi的. 下载挺 ...

  9. Python+VSCode+Git【转】

    Python+VSCode+Git 学习总结 - 秦无邪 - 博客园

  10. Kubernetes 常见错误

    OOMKilled: Pod 的内存使用超出了 resources.limits 中的限制,被强制杀死. CrashLoopBackoff: Pod 进入 崩溃-重启循环,重启间隔时间从 10 20 ...