day9博客
Posted laosun0204
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day9博客相关的知识,希望对你有一定的参考价值。
类中的__call__代表把一个类变成函数,加上括号就运行
class Reader(object):
def __init__(self, name, nationality):
self.name = name
self.nationality = nationality
def __call__(self):
print(\'Reader: %s Nationality: %s\' % (self.name, self.nationality))
r = Reader(\'Annie\', \'Chinese\') # 实例化类
r() # r()运行__call__里面的代码
类中的__str__的意思是返回一个对象的描述信息,需要返回一个字符串
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return \'名字是:%s,年龄是:%s\' % (self.name, self.age)
person = Person(\'张三\', 22)
print(person) # 打印对象就可以打印出__str__方法里返回的字符串
__str__和__repr__方法功能类似,如果没有添加__str__方法,Python 在需要该方法但找不到的时候,它会去调用__repr__方法,因此定义类的时候至少添加一个__repr__方法,这能保证自定义类中实现自我描述的功能
class Person(object):
"""如果__str__和__repr__方法都存在,优先打印__str__的返回值"""
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return \'名字是:%s,年龄是:%s\' % (self.name, self.age)
def __str__(self):
return \'哈哈哈\'
person = Person(\'张三\', 22)
print(person)
__new__方法和__init__的区别是以下几点:
1、继承自object的新式类才有__new__
2、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别,__init__有一个参数self,__init__在__new__的基础上可以完成一些其它初始化的动作
3、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例,__init__不需要返回值
4、__new__比__init__先执行,使用时尽量使用__init__函数,不要去自定义__new__函数
5、__new__用于生成实例对象,利用这个方法和类的属性的特点可以实现设计模式的单例模式,单例模式是指创建唯一对象,单例模式设计的类只能实例
class CapStr(str):
def __new__(cls, old_string):
new_string = old_string.upper()
return str.__new__(cls, new_string)
a = CapStr(\'I very like python...\')
print(a) # 打印出I VERY LIKE PYTHON...
__doc__方法的作用打印出文档字符串,也就是注释里的内容
def find_str():
"""查找子字符串出现的次数"""
st = input(\'请输入目标字符串:\').strip()
sub_str = input(\'请输入子字符串:\').strip()
if sub_str in st:
res = st.count(sub_str)
print(\'子字符串在目标字符串中共出现的次数是%d\' % res)
print(find_str.__doc__) # 文档字符串,打印出注释里的内容
find_str()
以上是关于day9博客的主要内容,如果未能解决你的问题,请参考以下文章