python 面向对象高级之魔法方法(自用笔记)

最近学习了一些常用的python魔法方法,将自己的学习笔记分享一下,希望大喜欢。也希望能对大家有帮助。话不多说!

一.isinstance(obj, cls)与issubclass(sub, super)方法

  • isinstance(obj, cls)检查obj是否是cls类的对象,是返回True,不是False.
  • issubclass(sub, super)检查sub类是否是super类的派生类。
 class Foo(object):
     pass

 obj = Foo()  
 isinstance(obj, Foo)  # 返回True
class Foo(object):
    pass
 
class Bar(Foo):
    pass
 
issubclass(Bar, Foo)  # 返回True

二.反射

反射指的是程序可以访问,检测和修改它自己状态行为的一种能力(自省)。通过字符串的形式操作对象相关的属性。

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

  1. hasattr(obj, name)判断判断一个对象里是否有name属性或者方法,返回bool值。name需要用引号括起来
  2. getattr(obj, name[, default])函数
    获取对象obj的name属性或者方法,存在用print打印出来(不存在打印默认值),注意:若name是一个方法,用print打印的是其内存地址,若要执行这个方法,则在其后添加括号()
  3. setattr(obj, name, values) 给对象obj的name属性赋values值,若属性不存在则先创建在赋值。
  4. delattr(obj, name)删除对象obj的name属性或者方法,不存在则报错。
class BlackMedium:
    feature = 'Ugly'

    def __init__(self, name, addr):
        self.name = name
        self.addr = addr

    def sell_house(self):
        print('%s 黑中介卖房子啦,傻逼才买呢,但是谁能证明自己不傻逼' % self.name)

    def rent_house(self):
        print('%s 黑中介租房子啦,傻逼才租呢' % self.name)


b1 = BlackMedium('万成置地', '回龙观天露园')
print(hasattr(b1, 'name'))  # 对象b1有name属性,返回True
print(hasattr(b1, 'sell_house'))  # 对象b1有sell_house方法,返回True
print(hasattr(b1, 'age'))   # 对象b1没有age属性,返回False

print(getattr(b1, 'name'))
print(getattr(b1, 'sell_house'))  # 获得对象的sell_house方法的内存地址

setattr(b1, 'name', '年年有余')    # 设值对象的name属性
print(getattr(b1, 'name'))
print(hasattr(b1, 'name'))
delattr(b1, 'name')   # 删除对象的name属性,若对象没有此属性,报错
print(hasattr(b1, 'name'))
# delattr(b1, 'gae')

python中万物皆对象

# 类也是对象,故这四种方法对类也适用
class Foo(object):
    staticField = "old boy"

    def __init__(self):
        self.name = 'wupeiqi'

    def func(self):
        return 'func'

    @staticmethod
    def bar():
        return 'bar'


print(getattr(Foo, 'staticField'))
print(getattr(Foo, 'func'))
print(getattr(Foo, 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值