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