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编程中字符串和列表的基本知识讲解
Oct 14 Python
python爬虫获取多页天涯帖子
Feb 23 Python
如何用Python合并lmdb文件
Jul 02 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
python3实现逐字输出的方法
Jan 23 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
python中with用法讲解
Feb 07 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
python db类用法说明
Jul 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/10/09 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python计算对角线有理函数插值的方法
2015/05/07 Python
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
django框架forms组件用法实例详解
2019/12/10 Python
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
自我鉴定范文
2013/11/10 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
课外活动总结
2015/02/04 职场文书
四群教育工作总结
2015/08/10 职场文书
高中信息技术教学反思
2016/02/16 职场文书
导游词之神仙居景区
2019/11/15 职场文书