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提取html文件中的特定数据的实现代码
Mar 24 Python
Python抽象类的新写法
Jun 18 Python
Python 中的with关键字使用详解
Sep 11 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
python采集微信公众号文章
Dec 20 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
Python 中判断列表是否为空的方法
Nov 24 Python
Python程序控制语句用法实例分析
Jan 14 Python
Python 一键获取电脑浏览器的账号密码
May 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
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
PHP中的类型约束介绍
2015/05/11 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
使用隐藏的new来创建对象
2011/03/29 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
python执行get提交的方法
2015/04/29 Python
python 队列详解及实例代码
2016/10/18 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
Python换行与不换行的输出实例
2020/02/19 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
老师自我鉴定范文
2013/12/25 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
治庸问责工作总结
2015/08/11 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang