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正则分组的应用
Nov 10 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
使用Python对Csv文件操作实例代码
May 12 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
Python 中字符串拼接的多种方法
Jul 30 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
Python模块 _winreg操作注册表
Feb 05 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
Mar 04 Python
python爬虫容易学吗
Jun 02 Python
Python内置函数property()如何使用
Sep 01 Python
教你用Python爬取英雄联盟皮肤原画
Jun 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
ThinkPHP缓存方法S()概述
2014/06/13 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
用Python写的图片蜘蛛人代码
2012/08/27 Python
Python中自定义函数的教程
2015/04/27 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
手把手教你python实现SVM算法
2017/12/27 Python
python ddt实现数据驱动
2018/03/14 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
python多任务之协程的使用详解
2019/08/26 Python
Python os模块常用方法和属性总结
2020/02/20 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
Python日志器使用方法及原理解析
2020/09/27 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
python 调用Google翻译接口的方法
2020/12/09 Python
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
销售行业个人求职自荐信
2013/09/25 职场文书
客户代表实习人员自我鉴定
2013/09/27 职场文书
高中毕业生自我鉴定
2013/11/03 职场文书
学校运动会开幕演讲稿
2014/01/04 职场文书
信用卡工资证明格式
2014/09/13 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
北京青年观后感
2015/06/15 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis