Python开发-031_与面向对象相关的内置函数

之前总结过内置函数,在这里总结一下与面向对象相关的内置函数

面向对象相关的内置函数

1.1 classmethod、staticmethod、property

这几个是与属性相关的内置函数

@property代表可读
@函数名.setter代表可写
@函数名.deleter代表可删除

1.2 callable,是否可在后面加括号执行

在之前总结函数中提到过,callable函数显示为True,可能是函数、类、具有call方法的对象三种可能性

# 函数
def func():
    pass
print(callable(func)) # True

# 类
class Foo(object):
    pass
print(callable(Foo)) # True

# 类中具有__call__方法的对象
class Foo(object):
    def __call__(self,*args,**kwargs):
        pass
obj = Foo()
print(callable(obj)) # True

1.3 super()

按照mro继承关系寻找父类的成员

class Base(object):
    def message(self):
        print("Base.message")
class Bar(object):
    def information(self):
        # super是指调用父类的message方法,由于没有此处没有父类,更具mro算法,获取到Base的message
        super().message() 
    def message(self):
        print("Bar.message")
class Foo(Bar,Base):
    pass

obj = Foo()
obj.information() # Base.message

主要应用于拓展已完成功能的类,不用修改其基础的代码,给其中方法添加功能

# 例如系统提供的dict类
class MyDict(dict):
    # 首先成为dict的子类
    def get(self,k):
        print("自定义的功能") # 添加的功能
        return super().get(k) # 后续功能交给dict.get(k)
info = MyDict()
info['name'] = 'kinght'
print(info.get("name"))
'''
自定义的功能
kinght
'''

上面只是演示方法,实际应用会在后续Django开发中演示

image-20210131150707551

1.4 type 获取一个对象的类型

type不需要我们太多介绍了,识别对象的类型,在面向对象中,如果是type的是实例化对象,则返回的是类名

v1 = "kinght"
result = type(v1)
print(result) # <class 'str'>

v2 = "kinght"
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 

1.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子类的实例。

在开发中,常常会将一个公共的功能放于一个类,isinstance函数就可以用于判断是否应用了这个父类

class Animal(object):
    def run(self):
        print("{}能跑".format(self.name))
class Dog(Animal):
    def __init__(self,name):
        self.name = name
class Cat(Animal):
    def __init__(self,name):
        self.name = name
data_list = [
    "kinght",
    "Aym",
    Dog('旺财'),
    Cat('可乐')
]

# 旺财和可乐需要调用Animal方法,判断列表中哪些需要调用Animal方法的类,并且让她调用

# 原始判别方法
for item in data_list:
    if type(item) == Cat:
        item.run()
    elif type(item) == Dog:
        item.run()
    else:
        pass

# isinstance函数
for item in data_list:
    # 判断item对应的函数是不是Animal的子类
    if isinstance(item,Animal):
        item.run()

1.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开发-031_与面向对象相关的内置函数
http://localhost:8080/archives/8882vb5Z
作者
kinght
发布于
2024年11月11日
更新于
2024年11月11日
许可协议