当前位置 博文首页 > Python面向对象之内置函数相关知识总结

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

    作者:华青水上 时间:2021-08-06 18:18

    Python内置函数

    1. classmethod、staticmethod、property 。

    上述三个内置函数在文章(Python进阶——面向对象之成员)的方法和属性中已经详细介绍使用,可以返回浏览,具体地址:http://blog.iis7.com/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
    

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

    jsjbwy
    下一篇:没有了