面向对象进阶

面向对象相关内置函数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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 应用程序启动速度的优化

    应用程序启动速度的优化

    2022年1月15日
  • 就这样CSDN账号被人盗了??

    就这样CSDN账号被人盗了??

    2022年1月19日
  • 苹果开发者账号申请流程_最新苹果开发者申请

    苹果开发者账号申请流程_最新苹果开发者申请苹果开发者帐号申请流程

    2022年4月21日
  • c# 字符串转时间的方式

    c# 字符串转时间的方式**第一种方法**stringtimeStr=”2019-08-28″;DateTimetime=Convert.ToDateTime(timeStr);**第二种:**DateTimeFormatInfotimeForInfo=newDateTimeFormatInfo();timeForInfo.ShortDatePattern=”yyyy/MM/dd”;stringtimeStr1=”2018-09-08″;vartime=Convert.

    2022年5月5日
  • Cutout Standard扣图软件「建议收藏」

    Cutout Standard扣图软件「建议收藏」CutoutStandard是款功能强大且专业的抠图工具。内置强大的功能,可以从相片背景中将您需要的对象抠出和制作蒙太奇图片,且提供Photoshop的抠图插件,非常方便实用。感兴趣的朋友快来下载使用吧。软件功能  【更改背景】CutoutStandard最新版允许您将新剪切的对象与您选择的另一个图像组合在一起。例如,您可以将剪切对象放在“其他位置”。  【模糊背景】选择此功能时,程序切换到模糊模式。您可以将图像的背景模糊到不同程度。此外,背景将被保留,并且唯一的组件会受到模糊效果的影响。这

    2022年9月24日
  • 十大经典思维面试题_JS面试题大全

    十大经典思维面试题_JS面试题大全年轻人你不讲武德,耗子尾汁~~~总结就是为了形成自己的js知识网,提升自己,加油!开始干1、介绍js的基本数据类型  答:Undefined、Null、Boolean、Number、String2、js有哪些内置对象? 答:数据封装类对象:Object、Array、Boolean、Number和String  其他对象:Function、Arguments、Math、Date、RegExp、Error  3、this对象的理解 答:this总是指向函数的直接调用者(而非间接调用者

    2022年8月26日

发表回复

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

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