Python——定制类(__str__、__getattr__)

本文介绍了Python类的__str__和__repr__方法,以及如何通过__getattr__动态获取属性。示例中展示了当尝试访问不存在的属性如'score'时,如何通过__getattr__避免错误,返回默认值。
摘要由CSDN通过智能技术生成
class Student:
    def __init__(self, name):
        self.name = name

    def __str__(self):  # 类似java中对象的toString()
        return 'Student object (name: %s)' % self.name

    # 直接显示变量调用的不是__str__(),而是__repr__(),两者的区别是__str__()返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。
    # 解决办法是再定义一个__repr__()。但是通常__str__()和__repr__()代码都是一样的,所以,有个偷懒的写法
    __repr__ = __str__



if __name__ == '__main__':
    print(Student('Michael'))  # s = <__main__.Student object at 0x109afb310>

    # for n in Fib():
    #     print(n)

    s = Student('Maria')
    print(s.name)
    print(s.score)



运行结果:
Student object (name: Michael)
Maria
Traceback (most recent call last):
  File "/Users/xxx/python-learn/Advanced_Features.py", line 38, in <module>
    print(s.score)
AttributeError: 'Student' object has no attribute 'score'


class Student:
    def __init__(self, name):
        self.name = name

   
    # 正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错。要避免这个错误,除了可以加上一 
    # 个score属性外,Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性。

    def __getattr__(self, attr):
        if attr == 'score':
            return 99

    def __str__(self):  # 类似java中对象的toString()
        return 'Student object (name: %s)' % self.name



if __name__ == '__main__':
    s = Student('Maria')
    print(s.name)
    print(s.score)


运行结果:
Maria
99

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值