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 相关文章推荐
Python3里的super()和__class__使用介绍
Apr 23 Python
解决PyCharm中光标变粗的问题
Aug 05 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
python之pexpect实现自动交互的例子
Jul 25 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
解决pytorch报错:AssertionError: Invalid device id的问题
Jan 10 Python
python操作redis数据库的三种方法
Sep 10 Python
python爬虫中的url下载器用法详解
Nov 30 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/07/27 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
python函数局部变量用法实例分析
2015/08/04 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
python字典改变value值方法总结
2019/06/21 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
python3跳出一个循环的实例操作
2020/08/18 Python
详解Python中import机制
2020/09/11 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
社区志愿者心得体会
2014/01/03 职场文书
2014年会演讲稿范文
2014/01/06 职场文书
高三体育教学反思
2014/01/29 职场文书
产品质量承诺范本
2014/03/31 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书