面向对象进阶

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


相关推荐

  • git查看用户名和修改用户名「建议收藏」

    git查看用户名和修改用户名「建议收藏」在和同事共同完成一个项目时,上传代码,用户名就得注意下,不然搞个昵称,都不知道是谁上传的简单写下查看用户名和邮箱地址:$gitconfiguser.name$gitconfiguser.email修改用户名和邮箱地址$gitconfig–globaluser.name”xxxx”Sgitconfig–globaluser.emai…

    2022年4月19日
    51
  • 投巧解决JavaScript split方法出现空字符的问题

    投巧解决JavaScript split方法出现空字符的问题直接使用split,前后各有一个“”值。>>varstr=’,a,b,c,d,e,f,’;>>str.split(‘,’);//(8)[“”,”a”,”b”,”c”,”d”,”e”,”f”,””]临时方法:split后,可以用filter过滤掉空值。>>varstr=’,a,b,c,d,e,f,’;>&…

    2025年8月8日
    4
  • (七十六) CountDownTimer

    (七十六) CountDownTimerdemo:https://github.com/happyjiatai/demo_csdn/tree/master/demo_76_countdowntimer1.CountDownTimer简介源码上是这么解释的:Scheduleacountdownuntilatimeinthefuture,with regularnotificationsoninterval…

    2022年9月17日
    3
  • UE4 Slate三 SlateUI代码讲解

    UE4 Slate三 SlateUI代码讲解原创文章,转载请注明出处。点击观看上一篇《UE4Slate二用UMG思想去理解Slate+Slate编码》点击观看下一篇《UE4Slate四SlateUI如何做动画》虚幻引擎SlateUI介绍1>前言2>该继承自哪个基类来写呢?SCompoundWidget/SPanel/SLeafWidget2.1>基类:SUserWidget或者是SCompoundWidget2.2>基类:SPanel2.3>基类:SLeafWidget3>该如何新建一个S类组件呢.

    2022年10月4日
    2
  • socket常用函数_socket是可重入函数吗

    socket常用函数_socket是可重入函数吗前言socketpair是Linux下的函数,其主要作用是创建一对套节字来进行进程间通信,其与匿名管道(PIPE)的作用相似,这两个套节字均可读可写.具体介绍见本博客另一篇文章:https://blog.csdn.net/wufuhuai/article/details/79747912实现我们都知道socket不仅能够进行跨进程通信,而且socket是可以双向通信的,即是…

    2022年10月14日
    2
  • 深度学习中学习率和batchsize对模型准确率的影响

    本内容来自其他的人解析,参考链接在最后的注释。1.前言目前深度学习模型多采用批量随机梯度下降算法进行优化,随机梯度下降算法的原理如下:n是批量大小(batchsize),η是学习率(learningrate)。可知道除了梯度本身,这两个因子直接决定了模型的权重更新,从优化本身来看它们是影响模型性能收敛最重要的参数。学习率直接影响模型的收敛状态,batchsize则影响模型的泛化性能,两者又是分子分母的直接关系,相互也可影响,因此这一次来详述它们对模型性能的影响。2.学习率如何影响模型性.

    2022年4月17日
    83

发表回复

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

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