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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
python魔法方法-属性访问控制详解
Jul 25 Python
关于反爬虫的一些简单总结
Dec 13 Python
python实现在pandas.DataFrame添加一行
Apr 04 Python
Python实现合并两个列表的方法分析
May 28 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
在python中利用numpy求解多项式以及多项式拟合的方法
Jul 03 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
Python values()与itervalues()的用法详解
Nov 27 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 Python
opencv-python图像配准(匹配和叠加)的实现
Jun 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 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
PHP在线生成二维码代码(google api)
2013/06/03 PHP
php实现的CSS更新类实例
2014/09/22 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
php简单日历函数
2015/10/28 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
面试常见的js算法题
2017/03/23 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
python多进程使用函数封装实例
2020/05/02 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
css3media响应式布局实例
2016/07/08 HTML / CSS
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
集体婚礼策划方案
2014/02/22 职场文书
承诺书的格式范文
2014/03/28 职场文书
公司请假条范文
2014/04/11 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
学校捐书活动总结
2015/05/08 职场文书
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers