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常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
python 判断网络连通的实现方法
Apr 22 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
python进程和线程用法知识点总结
May 28 Python
python redis连接 有序集合去重的代码
Aug 04 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
python3下pygame如何实现显示中文
Jan 11 Python
安装多个版本的TensorFlow的方法步骤
Apr 21 Python
opencv 查找连通区域 最大面积实例
Jun 04 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 Python
python面向对象版学生信息管理系统
Python实现学生管理系统(面向对象版)
Jun 24 #Python
Pycharm连接远程服务器并远程调试的全过程
Python函数中的不定长参数相关知识总结
Jun 24 #Python
Django REST framework 限流功能的使用
Jun 24 #Python
Python 发送SMTP邮件的简单教程
Python开发工具Pycharm的安装以及使用步骤总结
You might like
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
原生js二级联动效果
2017/06/20 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
python使用win32com库播放mp3文件的方法
2015/05/30 Python
python创建进程fork用法
2015/06/04 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
详解Django中间件执行顺序
2018/07/16 Python
python读取各种文件数据方法解析
2018/12/29 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Python实现弹球小游戏
2020/08/01 Python
python编程的核心知识点总结
2021/02/08 Python
90后毕业生的求职信范文
2013/09/21 职场文书
自荐信的两点禁忌
2013/10/30 职场文书
工商管理专业职业生涯规划
2014/01/01 职场文书
通用自荐信范文
2014/03/14 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
《悯农》教学反思
2014/04/28 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
Python一些基本的图像操作和处理总结
2021/06/23 Python
Python中Selenium对Cookie的操作方法
2021/07/09 Python