Python面向对象之内置函数相关知识总结

作者:华青水上 时间:2022-06-05 10:30:24 

Python内置函数

1. classmethod、staticmethod、property 。

上述三个内置函数在文章(Python进阶——面向对象之成员)的方法和属性中已经详细介绍使用,可以返回浏览,具体地址:https://www.jb51.net/article/215871.htm

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

至此,关于面向对象的一些内置函数已经总结完毕,如有不当之处,欢迎指正!

来源:https://blog.csdn.net/r1141207831/article/details/117911058

标签:Python,内置函数
0
投稿

猜你喜欢

  • python使用opencv对图像mask处理的方法

    2021-05-03 03:23:19
  • Python2.5/2.6实用教程 入门基础篇

    2021-12-22 20:25:58
  • python opencv圆、椭圆与任意多边形的绘制实例详解

    2021-12-08 08:20:48
  • Django 大文件下载实现过程解析

    2021-12-18 20:48:32
  • python 检测nginx服务邮件报警的脚本

    2023-08-04 17:34:10
  • Javascript获取表单名称(name)的方法

    2024-06-07 15:25:45
  • JS创建对象的写法示例

    2024-04-16 08:54:48
  • Python实现读取邮箱中的邮件功能示例【含文本及附件】

    2022-10-25 04:37:23
  • Java匹配正则表达式汇总

    2023-03-31 03:52:22
  • Django框架的使用教程路由请求响应的方法

    2022-02-08 19:04:55
  • JS 显示当前日期+星期(静态)

    2007-09-11 13:29:00
  • python安装numpy和pandas的方法步骤

    2023-05-19 09:43:09
  • python使用matplotlib绘制折线图的示例代码

    2021-06-25 22:51:18
  • 百度编辑器复制微信图片无法保存

    2023-08-14 17:32:46
  • require.js+vue开发微信上传图片组件

    2024-06-05 15:31:01
  • 十个简单好用的设计技巧[译]

    2009-04-08 12:56:00
  • python字符串string的内置方法实例详解

    2022-06-14 01:10:23
  • 详解Python IO编程

    2021-06-26 08:40:48
  • go程序员日常开发效率神器汇总

    2024-02-16 23:04:40
  • 深入理解go slice结构

    2024-04-26 17:27:07
  • asp之家 网络编程 m.aspxhome.com