面向对象进阶

面向对象相关内置函数isinstance判断一个对象是否是一个类中的对象issubclass判断一个类是否是类中的子类返回布尔值反射反射的概念所谓的反射其实就是用字符串类型的名字去操作

大家好,又见面了,我是你们的朋友全栈君。

面向对象相关内置函数

isinstance判断一个对象是否是一个类中的对象

class A:
    role = 'A'
    def __init__(self,name):
        self.name = name

    def walk(self):
        print('A is walking')

a = A('少林寺')
print(isinstance(a,A))     #判断对象a是否是类A中的对象,返回布尔值

issubclass判断一个类是否是类中的子类 返回布尔值

class Foo:
    print('我是父类')

class Son1(Foo):
    print('我是子类1')

class Son2(Foo):
    print('我是子类2')

print(issubclass(Son1,Foo))
print(issubclass(Son2,Foo))       判断一个类(Son1或者Son2)是否是类(Foo)中的子类  返回布尔值   

反射

反射的概念

所谓的反射其实就是用字符串类型的名字 去操作 变量

反射的作用(优势)

反射提供的方法

反射提供了4个内置函数分别为:getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子:

getattr获取成员

class Foo(object):
 
    def __init__(self):
        self.name = 'abc'
 
    def func(self):
        return 'ok'
 
obj = Foo()
#获取成员
ret = getattr(obj, 'func')#获取的是个对象
r = ret()
print(r)

hasattr检查成员

class Foo(object):
 
    def __init__(self):
        self.name = 'abc'
 
    def func(self):
        return 'ok'
 
obj = Foo()
#检查成员
ret = hasattr(obj,'func')#因为有func方法所以返回True
print(ret)

setattr设置成员

class Foo(object):
 
    def __init__(self):
        self.name = 'abc'
 
    def func(self):
        return 'ok'
 
obj = Foo()

#设置成员
print(obj.name) #设置之前为:abc
ret = setattr(obj,'name',19)
print(obj.name) #设置之后为:19

delattr删除成员

class Foo(object):
 
    def __init__(self):
        self.name = 'abc'
 
    def func(self):
        return 'ok'
 
obj = Foo()

#删除成员
print(obj.name) #abc
delattr(obj,'name')
print(obj.name) #报错

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124495.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dz论坛ucenter打不开mysql_Discuz论坛搬家 ucenter info:can not connect to MySQL server解决办法…「建议收藏」

    dz论坛ucenter打不开mysql_Discuz论坛搬家 ucenter info:can not connect to MySQL server解决办法…「建议收藏」问题描述UCenterinfo:CannotconnecttoMySQLserverError:Accessdeniedforuser‘a*********’@’localhost’(usingpassword:YES)解决方法修改/web/uc_server/data/config.inc.PHP文件里的数据库用户名密码,更新为新数据库的用户名及密码。ftp重新上传一…

    2022年7月25日
    12
  • LTE系统信息块SIB:LTE system information blocks-MIB,SIB-1,2,3,4,5,6,7,8,9,10,11

    LTE系统信息块SIB:LTE system information blocks-MIB,SIB-1,2,3,4,5,6,7,8,9,10,11TableofContentsSI静态部分和动态部分有两个部分。静态部件称为MIB动态部件称为SIBDetailSampleLTESystemInformationBlock(SIB)Contentssib1_decodedRELATEDLINKSAcknowledgementThesysteminformationisvery…

    2022年10月6日
    6
  • CUDA编程之快速入门(CUDA10)

    CUDA编程cmake基本模板cmake版本与命令cmake版本之间会有命令差异,高版本中会舍弃一些低版本中的命令。而网上找到的大部分的cuda程序cmake文件都是基于低版本的,基本上都是有 add_cuda_executable这个命令的版本。而这个命令在高版本中丢弃了,所以要修改win10预览版系统中cmake出错的问题如果安装的是win10的预览版或者其他什么原因,如果出现报错:–SelectingWindowsSDKversion10.0.19041.0totarge

    2022年4月10日
    178
  • UML详解之四——活动图[通俗易懂]

    UML详解之四——活动图[通俗易懂]活动图(面向活动的)活动图(ActivityDiagrams)在本质上就是流程图,它很好地描述了系统的活动、判定点、先后顺序和分支等,展现从一个活动到另一个活动的控制流。因此它是一种能够描述系统功能流程的工具也是用例图的很好补充。活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。图片来自http://blog.csdn.net/lishehe/article/detai

    2022年5月10日
    42
  • xcode自动签名_配置实用工具也不能移除

    xcode自动签名_配置实用工具也不能移除之前看到过一篇无证做真机测试的文章,很受用~不过因为当时手贱,把默认的“iPhoneDeveloper”签名改成了自己的名字直接导致后来的每一个XCode项目,我想在真机上面看效果都要重新设置签名配置。当然,是可以按照那篇文章把这个名字再修改回来,不过我当时懒,就一直这么弄着了如今经过了那么长的时间,我电脑里面存储的很多工程都沿用了这蛋疼的配置所以一时半会儿

    2022年9月27日
    7
  • 主定理的证明及应用举例

    主定理的证明及应用举例主定理主定理最早出现在 算法导论 中 提供了分治方法带来的递归表达式的渐近复杂度分析 规模为 n 的问题通过分治 得到 a 个规模为 n b 的问题 每次递归带来的额外计算为 c n d T n aT n b c n d 那么就可以得到问题的复杂度为

    2025年10月23日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号