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开发中演示
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