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 while、for、生成器、列表推导等语句的执行效率测试
Jun 03 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
Jun 07 Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
详解python eval函数的妙用
Nov 16 Python
Python 数据处理库 pandas进阶教程
Apr 21 Python
python高阶爬虫实战分析
Jul 29 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
python3爬虫怎样构建请求header
Dec 23 Python
Python函数返回不定数量的值方法
Jan 22 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 Python
python面向对象版学生信息管理系统
Python实现学生管理系统(面向对象版)
Jun 24 #Python
Pycharm连接远程服务器并远程调试的全过程
Python函数中的不定长参数相关知识总结
Jun 24 #Python
Django REST framework 限流功能的使用
Jun 24 #Python
Python 发送SMTP邮件的简单教程
Python开发工具Pycharm的安装以及使用步骤总结
You might like
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
python使用str &amp; repr转换字符串
2016/10/13 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
python 等差数列末项计算方式
2020/05/03 Python
Python3开发环境搭建详细教程
2020/06/18 Python
通过实例解析python and和or使用方法
2020/11/14 Python
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
总经理职责范文
2013/11/08 职场文书
会计专业的自荐信
2013/12/12 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
2014年新教师工作总结
2014/11/08 职场文书
爱心捐款感谢信
2015/01/20 职场文书
中秋节慰问信
2015/02/15 职场文书
采购内勤岗位职责
2015/04/13 职场文书
亮剑观后感300字
2015/06/05 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书