ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python极简教程08:对象的方法

2022-01-18 16:32:54  阅读:205  来源: 互联网

标签:__ 极简 调用 python 08 init print new 方法


测试奇谭,BUG不见。

讲解之前,我先说说我的教程和网上其他教程的区别:

1 我分享的是我在工作中高频使用的场景,是精华内容;

2 我分享的是学习方法,亦或说,是指明你该学哪些、该重点掌握哪些内容;

3 基于1和2,你可以按照我的教程学,也可以网上找视频学,也可以看书学……你得明白,掌握学习方法比找学习资料重要得多。

这一场,主讲python的面向对象的第二部分——对象的方法

目的:掌握Python对象的五个核心方法。

init和new

讲解之前,先上一段代码

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方法才是创建实例的方法。

大家谨记,以免面试时踩坑。

类方法、静态方法、对象方法

首先,先讲讲这三个方法如何使用。

  • 类方法:使用 @classmethod 装饰,第一个参数是cls
  • 静态方法:使用 @staticmethod 装饰
  • 对象方法:不使用装饰器,第一个参数是self
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搞定。

但是,如果你想进阶,理解面向对象,它们很重要。

类方法

  • @classmethod 修饰,第一个参数是 cls
  • 方法作用:和实例无关,可以直接用 类名.方法名() 调用
  • 可能会需要用到类变量(注意:不是成员变量)
  • 可以类调用,也可以实例调用

静态方法

  • @staticmethod 修饰
  • 方法作用:和实例无关,可以直接用 类名.方法名() 调用,相当于一个类对外界提供的工具方法
  • 基本上不会用到类变量,用到类变量的话,只能硬编码调用类变量
  • 可以类调用,也可以实例调用

对象方法

  • 第一个参数是self
  • 实例的方法
  • 可以访问成员变量
  • 只能实例调用,不能类调用

一如既往,做个总结

01 我知道,对于初学者来说,面向对象,这个抽象的概念很难理解,但是,我没说,你一定要理解;

02 如果确实没有编码基础,先学会用,在用的过程中去理解,不更好吗?

标签:__,极简,调用,python,08,init,print,new,方法
来源: https://www.cnblogs.com/testtalking/p/15818462.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有