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中的reduce内建函数使用方法指南
Aug 31 Python
在Python中使用元类的教程
Apr 28 Python
用python找出那些被“标记”的照片
Apr 20 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
Python3.5集合及其常见运算实例详解
May 01 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
详解用python计算阶乘的几种方法
Aug 14 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
pycharm下pyqt4安装及环境配置的教程
Apr 24 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
python面向对象版学生信息管理系统
Python实现学生管理系统(面向对象版)
Jun 24 #Python
Pycharm连接远程服务器并远程调试的全过程
Python函数中的不定长参数相关知识总结
Jun 24 #Python
Django REST framework 限流功能的使用
Jun 24 #Python
Python 发送SMTP邮件的简单教程
Python开发工具Pycharm的安装以及使用步骤总结
You might like
Protoss魔法科技
2020/03/14 星际争霸
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
python实现括号匹配的思路详解
2018/08/23 Python
用Python解决x的n次方问题
2019/02/08 Python
Django实现学员管理系统
2019/02/26 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
2019/08/22 Python
详解python中的模块及包导入
2019/08/30 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Python面向对象封装操作案例详解
2019/12/31 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
Python读写Excel表格的方法
2021/03/02 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
怎样比较两个类型为String的字符串
2016/08/17 面试题
某公司部分笔试题
2013/11/05 面试题
元旦晚会活动总结
2014/07/09 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
大连星海广场导游词
2015/02/10 职场文书
pytorch Dropout过拟合的操作
2021/05/27 Python
Java实现聊天机器人完善版
2021/07/04 Java/Android
linux下安装redis图文详细步骤
2021/12/04 Redis
基于redis+lua进行限流的方法
2022/07/23 Redis