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实现博客文章爬虫示例
Feb 26 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
Python编程实现tail-n查看日志文件的方法
Jul 08 Python
python实现邮件自动发送
Aug 10 Python
python数据持久存储 pickle模块的基本使用方法解析
Aug 30 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
python 消除 futureWarning问题的解决
Dec 25 Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
Python 线程池模块之多线程操作代码
May 20 Python
python自动化测试之Selenium详解
Mar 13 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输入流php://input介绍
2012/09/18 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
javascript 最常用的10个自定义函数[推荐]
2009/12/26 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
谈谈JS中的!!
2017/12/07 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
八年级音乐教学反思
2014/01/09 职场文书
优秀党支部事迹材料
2014/01/14 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
投资意向协议书
2015/01/29 职场文书
2015年三万活动总结
2015/03/25 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书