Python面向对象之内置函数相关知识总结


Posted in Python onJune 24, 2021

Python内置函数

1. classmethod、staticmethod、property 。

上述三个内置函数在文章(Python进阶——面向对象之成员)的方法和属性中已经详细介绍使用,可以返回浏览,具体地址:

2. callable,是否可在后面加括号执行。

 函数

def func():
    pass
 
print( callable(func) ) # True

class Foo(object):
    pass
 
print( callable(Foo) ) # True

类中具有__call__方法的对象

class Foo(object):
	pass
 
obj = Foo()
print( callable(obj) ) # False
class Foo(object):
 
    def __call__(self, *args, **kwargs):
        pass
    
obj = Foo()
print( callable(obj) ) # True

所以当你以后在见到下面的情况时,首先就要想到handler可以是:函数、类、具有call方法的对象 这三种,到底具体是什么,需要根据代码的调用关系才能分析出来。

def do_something(handler):
    handler()

3. super,按照mro继承关系向上找成员。

class Top(object):
    def message(self, num):
        print("Top.message", num)
        
class Base(Top):
    pass
 
class Foo(Base):
 
    def message(self, num):
        print("Foo.message", num)
        super().message(num + 100)
 
 
obj = Foo()
obj.message(1)
 
>>> Foo.message 1
>>> Top.message 101
class Base(object):
 
    def message(self, num):
        print("Base.message", num)
        super().message(1000)
 
 
class Bar(object):
 
    def message(self, num):
        print("Bar.message", num)
 
 
class Foo(Base, Bar):
    pass
 
 
obj = Foo()
obj.message(1)
 
>>> Base.message 1
>>> Bar.message 1000

应用场景

假设有一个类,他原来已实现了某些功能,但我们想在他的基础上再扩展点功能,重新写一遍?比较麻烦,此时可以用super。

info = dict() # {}
info['name'] = "华青水上"
info["age"] = 18
 
value = info.get("age")
 
print(value)
class MyDict(dict):
 
    def get(self, k):
        print("自定义功能")
        return super().get(k)
 
 
info = MyDict()
info['name'] = "华青水上" # __setitem__
info["age"] = 18       # __setitem__
print(info)
 
value = info.get("age")
 
print(value)

4. type,获取一个对象的类型。

v1 = "华青水上"
result = type(v1)
print(result) # <class 'str'>
v2 = "华青水上"
print( type(v2) == str )  # True
 
v3 = [11, 22, 33] # list(...)
print( type(v3) == list )  # True
class Foo(object):
    pass
 
v4 = Foo()
 
print( type(v4) == Foo )  # True

5. isinstance,判断对象是否是某个类或其子类的实例。

class Top(object):
    pass
 
 
class Base(Top):
    pass
 
 
class Foo(Base):
    pass
 
 
v1 = Foo()
 
print( isinstance(v1, Foo) )   # True,对象v1是Foo类的实例
print( isinstance(v1, Base) )  # True,对象v1的Base子类的实例。
print( isinstance(v1, Top) )   # True,对象v1的Top子类的实例。
class Animal(object):
    def run(self):
        pass
 
class Dog(Animal):
    pass
 
class Cat(Animal):
    pass
 
data_list = [
    "alex",
    Dog(),
    Cat(),
	"root"
]
 
for item in data_list:
    if type(item) == Cat:
        item.run()
    elif type(item) == Dog:
        item.run()
    else:
        pass
    
for item in data_list:
    if isinstance(item, Animal):
        item.run()
    else:
        pass

6. issubclass,判断类是否是某个类的子孙类。

class Top(object):
    pass
 
 
class Base(Top):
    pass
 
 
class Foo(Base):
    pass
 
 
print(issubclass(Foo, Base))  # True
print(issubclass(Foo, Top))   # True

至此,关于面向对象的一些内置函数已经总结完毕,如有不当之处,欢迎指正!

到此这篇关于Python面向对象之内置函数相关知识总结的文章就介绍到这了,更多相关Python内置函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
深入分析在Python模块顶层运行的代码引起的一个Bug
Jul 04 Python
Python常用知识点汇总
May 08 Python
Python实现类的创建与使用方法示例
Jul 25 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
Python命令行解析模块详解
Feb 01 Python
python实现单向链表详解
Feb 08 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 Python
用python写扫雷游戏实例代码分享
May 27 Python
Django Rest framework之权限的实现示例
Dec 17 Python
python控制nao机器人身体动作实例详解
Apr 29 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 Python
python面向对象版学生信息管理系统
Python实现学生管理系统(面向对象版)
Jun 24 #Python
Pycharm连接远程服务器并远程调试的全过程
Python函数中的不定长参数相关知识总结
Jun 24 #Python
Django REST framework 限流功能的使用
Jun 24 #Python
Python 发送SMTP邮件的简单教程
Python开发工具Pycharm的安装以及使用步骤总结
You might like
PHP中extract()函数的妙用分析
2012/07/11 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[52:00]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs Optic
2018/04/02 DOTA
对python的输出和输出格式详解
2018/12/08 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
python 录制系统声音的示例
2020/12/21 Python
世界汽车零件:World Car Parts
2019/09/04 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
先进个人获奖感言
2014/01/24 职场文书
周年庆典主持词
2014/04/02 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
少先队活动总结
2014/08/29 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
圣诞晚会主持词
2015/07/01 职场文书
《植树问题》教学反思
2016/03/03 职场文书
靠谱的活动总结
2019/04/16 职场文书
文书工作总结(范文)
2019/07/11 职场文书