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最基本的输入输出详解
Apr 25 Python
python中enumerate函数用法实例分析
May 20 Python
Django返回json数据用法示例
Sep 18 Python
Python异常处理操作实例详解
Aug 28 Python
用Python逐行分析文件方法
Jan 28 Python
PyQt5 多窗口连接实例
Jun 19 Python
python中的Elasticsearch操作汇总
Oct 30 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
Python如何配置环境变量详解
May 18 Python
python库sklearn常用操作
Aug 23 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/10/09 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
js window.onload 加载多个函数的方法
2009/11/02 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
python实现异步回调机制代码分享
2014/01/10 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
Python中optparser库用法实例详解
2018/01/26 Python
python导入模块交叉引用的方法
2019/01/19 Python
python实现字符串和数字拼接
2020/03/02 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
家庭户外服装:Hawkshead
2017/11/02 全球购物
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
资料员岗位职责
2013/11/17 职场文书
甲方资料员岗位职责
2013/12/13 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
煤矿安全承诺书
2014/05/22 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
小学工作总结2015
2015/05/04 职场文书
电影建党伟业观后感
2015/06/01 职场文书
2016年教师节感言
2015/12/09 职场文书