Python面向对象之内置函数相关知识总结
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
至此,关于面向对象的一些内置函数已经总结完毕,如有不当之处,欢迎指正!
到此这篇关于Python面向对象之内置函数相关知识总结的文章就介绍到这了,更多相关Python内置函数内容请搜索hwidc以前的文章或继续浏览下面的相关文章希望大家以后多多支持hwidc!