day 0802 面向对象3

面向对象3

instance 和 issubclass

instance

  • 判断是否是同一个类
class Foo:
    pass
foo=Foo()
print(isinstance(foo,Foo))
print(isinstance(1,int))

True
True

issubclass

  • a是否继承于b这个类
class Foo:
    pass
foo=Foo()
print(isinstance(foo,Foo))
print(isinstance(1,int))
class Bar(Foo):
    pass
print(issubclass(Bar,Foo))

True
True
True

反射

所谓反射,是指程序可以访问,检测和修改它本身状态或者行为的能力,就是它自己看看它自己是个啥情况(自省)

Python中,面向对象中的反射是指通过字符串的形式操作对象的相关属性。

四个可以实现自省的函数

  • hasattr
  • getattr
  • setattr
  • delattr
class Foo:
    f='类的静态变量'
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def say(self):
        print('Hello',self.name)
obj=Foo('Tom',22)
#检测是否含有某个属性
print(hasattr(obj,'name'))
print(hasattr(obj,'say'))
#删除属性
delattr(obj,'show_name')
print(obj.__dict__)
delattr(obj,'Hello')

True
True

##‘del

构造方法,当对象在内存中被释放,就会自动触发执行

一般不需要自定义

因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

str

  • 如果直接print打印对象,会看到创建对象的内存地址
  • 当我们使用print(XXX)时,输出对象,如果对象中定义了’str’方法,就会打印该方法return的信息描述。

类装饰器

def func():
    print('Hello')
func()
print(func())
#调用----->call ---called
对应的,类实例对象的调用,需要使用到"__call__特殊方法"
class Student:
    def __init__(self,name):
        self.name=name
    def __call__(self, classmate):
        print('我的名字是:%s,我的同桌是%s'%(self.name,classmate))
stu=Student('嗷嗷嗷')
stu('呜呜呜')
我的名字是:嗷嗷嗷,我的同桌是呜呜呜

[外链图片转存失败(img-iLudLDWy-1564738210846)(C:\Users\xdw\AppData\Roaming\Typora\typora-user-images\1564714627422.png)]

smate))
stu=Student(‘嗷嗷嗷’)
stu(‘呜呜呜’)
我的名字是:嗷嗷嗷,我的同桌是呜呜呜


[外链图片转存中...(img-iLudLDWy-1564738210846)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值