测试奇谭,BUG不见。
讲解之前,我先说说我的教程和网上其他教程的区别:
1 我分享的是我在工作中高频使用的场景,是精华内容;
2 我分享的是学习方法,亦或说,是指明你该学哪些、该重点掌握哪些内容;
3 基于1和2,你可以按照我的教程学,也可以网上找视频学,也可以看书学……你得明白,掌握学习方法比找学习资料重要得多。
这一场,主讲python的面向对象的第二部分——对象的方法。
目的:掌握Python对象的五个核心方法。
讲解之前,先上一段代码
class Demo: def __init__(self, name): print("init") print("init " + name) def __new__(cls, *args, **kwargs): print("new") print("new " + args[0]) d = Demo("张三")
通过前面的学习,你能说出这段代码运行的输出结果吗?
答案是:
#new #new 张三
通常,我们会认为__init__()是类的初始化方法,当实例化类之后,会优先执行它(运行后应当优先输出"init"、"init 张三"),但实际上,__new__()方法才优先执行的方法,同时,它也是创建对象的方法。
说得通俗一点:以造房子举例,new方法是打地基,存放建材原料,init方法则是按照图纸建造房子。
那么,什么时候用new方法?
其实,用得很少,更多的时候,我们使用的是init方法。但init方法用久了之后,就会误以为它是创建实例的方法,而实际上,new方法才是创建实例的方法。
大家谨记,以免面试时踩坑。
首先,先讲讲这三个方法如何使用。
class Cat: age = 5 area = 'Chengdu' def __init__(self, name): self.name = name # 这是一个有问题的方法 def drink(): print("Cat drink") # 这是一个静态方法 @staticmethod def eat(food): print("Cat eat {}".format(food)) # 这是一个对象方法 def get_name(self): return self.name # 这是一个类方法 @classmethod def info(cls): print(cls.age) print(cls.area) print(self.name) # 实例化一只叫Kitty的黑猫 black_cat = Cat('Kitty') # 有问题的方法,直接报错了 # black_cat.drink() # 静态方法调用 black_cat.eat('fish') # 可以实例(black_cat)调用 Cat.eat('fish') # 也可以类(Cat)调用 # 类方法调用 black_cat.info() # 可以实例(black_cat)调用 Cat.info() # 也可以类(Cat)调用 # 对象方法调用 print(black_cat.get_name()) # 只能实例(black_cat)调用
到这里,你可能会问,这东西有啥用?
如果你只想写个脚本,执行一些简单的程序,那确实没啥用。你可以不关心这三个方法以及他们的调用,甚至连class类都不用写,直接def搞定。
但是,如果你想进阶,理解面向对象,它们很重要。
类名.方法名()
调用类名.方法名()
调用,相当于一个类对外界提供的工具方法01 我知道,对于初学者来说,面向对象,这个抽象的概念很难理解,但是,我没说,你一定要理解;
02 如果确实没有编码基础,先学会用,在用的过程中去理解,不更好吗?