网络编程
位置:首页>> 网络编程>> Python编程>> Python面向对象之内置函数相关知识总结

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

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

标签: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

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

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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com