面向对象高级
Posted oden
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象高级相关的知识,希望对你有一定的参考价值。
面向对象高级
isinstance(obj,cls)和issubclass
isinstance(obj,cls)检查obj是否是类cls的对象
issubclass(sub,super)检查sub类是否是super类的派生类
反射
python中面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以用反射)。
- hasattr
hasattr(object,name)
# 判断object中有没有name的属性或者方法
- getattr
getattr(object,name,default = None)
# object: 对象
# name: 字符串,属性
# default: 默认返回值,如果不提供该参数,在没有对应属性时,触发AttributeError
- setattr
setattr(object,name,value)
# object: 对象
# name: 字符串,属性
# value: 属性值
# 对已存在的属性进行修改,如果没有,则会新建出这个属性
- delattr
delattr(object,name)
# object: 对象
# name: 属性(必须是属性,不能是方法)
# detattr(x,‘foobar‘) == del x.foobar
内置类属性
__dict__ :类的属性(包含一个字典,由类的数据属性组成)
__doc__: 类的文档字符串
__name__: 类名
__module__:类定义所在的模块(类的全名是‘__main__.className‘,如果类位于一个导入模块common_module中,那么className.__module__ 等于common_module)
打印内容如下:
- 类中的魔术方法(内置的一些方法)
- --str--
# 把一个类的实例变成str
class Person(object):
self.name = name
self.gender = gender
def __str__(self):
return ‘(Person:%s,%s)‘%(self.name,self.gender)
- --steattr--
def __setattr__(self,name,value):
pass
# 添加/修改属性时,会触发执行
- --getattr--
def __getattr__(self,item):
pass
# 只有在调用属性,且属性不存在时,才会触发
- --getattr--
def __delattr__(self,item):
pass
# 删除属性时会触发
以上是关于面向对象高级的主要内容,如果未能解决你的问题,请参考以下文章