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中管道用法入门实例
Jun 04 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
Python中表示字符串的三种方法
Sep 06 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
详解python:time模块用法
Mar 25 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
Python OpenCV图像指定区域裁剪的实现
Oct 30 Python
python实现批量修改文件名
Mar 23 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
为什么python比较流行
Jun 19 Python
Python中Matplotlib的点、线形状、颜色以及绘制散点图
Apr 07 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正则
2006/07/07 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
用js计算页面执行时间的函数
2006/12/07 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
vue权限路由实现的方法示例总结
2018/07/29 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
python调用百度语音REST API
2018/08/30 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
新浪网技术部笔试题
2016/08/26 面试题
面试必备的求职信
2014/05/25 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
大学感恩节活动总结
2015/05/05 职场文书
实习指导老师意见
2015/06/04 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python