乐学python_【IT专家】铁乐学python

铁乐学

python

2018/04/18 13

铁乐学

python_day23_

面向对象进阶

1_

反射

以下内容大部分摘自博客

cnblogs/Eva-J/

isinstance()

issubclass()

两者的返回值都是布尔值

isinstance()

能够检测到继承关系

type()

只能单纯的判

断类

isinstance()

判断一个对象和一个类有没有血缘关系

issubclass()

接收两个参数,前一个是子类名,后一个是父类名

如果返回

True,

明有父子

(

继承

)

关系。

isinstance(obj,cls)

检查

obj

是否是类

cls

的对象

class Foo(object): passobj = Foo()

#

实例化

isinstance(obj, Foo)issubclass(sub, super)

检查

sub

类是否是

super

类的派生

class Foo(object): passclass Bar(Foo): passissubclass(Bar, Foo)issubclass

可以追溯

更远的源头,例如:

class

tuple_A():

passclass

grandfather_B(tuple_A):

passclass

father_C(grandfather_B):

passclass

son_D(father_C):

passprint(issubclass(son_D,

tuple_A))

#

返回

True

,是不是很像吸血鬼家族呢?

1

什么是反射

反射的概念是由

Smith

1982

年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行

为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性

的研究。它首先被程序语言的设计领域所采用

,

并在

Lisp

和面向对象方面取得了成

绩。

2

python

面向对象中的反射:

通过字符串的形式操作对象相关的属性。

python

中的一切事物都是对象(都可以使用反射)

四个可以实现自省的函数:

下列方法

适用于类和对象(一切皆对象,类本身也是一个对象)

1

hasattr(*args, **kwargs)def hasattr(*args, **kwargs): # real signature unknown

Return whether

the

object

has an attribute with

the

given

name.

This

is done

by

calling

getattr(obj,

name)

and

catching

AttributeError.

pass2

getattr(object,

name,

default=None)def

getattr(object,

name,

default=None):

#

known

special

case

of

getattr

getattr(object, name[, default]) - value Get a named attribute from an object; getattr(x,

‘y’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值