关于魔法方法的一点总结

如果按以下方式重写魔法方法 _init_,结果会怎样?

class Myclass:
    def __init__(self):
        return "I love you"

会报错,因为init 特殊方法不应当返回除了 None 以外的任何对象。


假设已经有鸟类的定义,现在我要定义企鹅类继承于鸟类,但我们都知道企鹅是不会飞的,我们应该如何屏蔽父类(鸟类)中飞的方法?

用子类覆盖掉父类的方法就行了

class Bird:
    def fly(self):
        print("fly away")

class Penguin(Bird):
    def fly(self):
        pass

写一个 FileObject 类,给文件对象进行包装,从而确认在删除对象时文件能自动关闭

class FileObject:
    def __init__(self, filename):
        self.new_file = open(filename, 'r')

    def __del__(self):
        self.new_file.close()
        del self.new_file

对文件进行包装从而确定在删除时文件可以自动关闭。


按照以下要求,定义一个类实现摄氏度到华氏度的转换(转换公式:华氏度 = 摄氏度*1.8+32)

希望可以尽可能简化的形式输出,有如下输出格式

>>> print(C2F(32))

89.6

为了尽量简练地实现功能,我们采取了“偷龙转凤”的小技巧。在类进行初始化之前,通过“掉包” tem 参数,让实例对象直接返回计算后的结果。

class C2F(float):
    def __new__(cls, tem=0.0):
        return float.__new__(cls, tem*1.8+32)   

定义一个类继承于 int 类型,并实现一个特殊功能:当传入的参数是字符串的时候,返回该字符串中所有字符的 ASCII 码的和(使用 ord() 获得一个字符的 ASCII 码值)。

class Nint(int):
    def __new__(cls, arg = 0):
        if isinstance(arg, str):
            total = 0

            for each in arg:
                total += ord(each)

            arg = total
        return int.__new__(cls, arg)

结果:

>>> print(Nint('A'))

65
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Einstellung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值