1
noe132 2022-07-09 01:30:21 +08:00
把函数和状态搓到一起放在一个对象上面,通过这个对象来解决状态和操作的封装,这种编程思路就是面向对象编程。
你觉得类和函数有点像,是因为类的构造函数 __init__ 也是一种函数。 在类上面的函数叫做方法。方法和普通函数的区别就是方法在实例上被调用会自动传 self 参数。 为什么会报错?因为你写错了。__init__前后有 2 个下划线 |
2
ccdjh 2022-07-09 07:38:46 +08:00
感觉是 java 老师教 python 。python 就是随心所欲,没有那么多框架。估计下节课就是教继承 -_-
你一样可以使用函数: >>> def selfintro(name,age): ... print(f'hello,i am {name},{age} years old') ... >>> selfintro('huzh',18) hello,i am huzh,18 years old __init__ 是设置定义 class People 的参数。因为类不像函数可以在后面写参数。至于为什么是用__init__,这是 python 的作者自己决定的。至于为啥有函数还要用类,方便你某些情景使用,不一定要你用。 |
3
jaredyam 2022-07-09 10:12:13 +08:00
类是基于面向对象编程这一思想的封装形式,所谓属性和行为是基于这一思想范式而描述的。函数是在编程语言层对具有特定约束的输入输出过程的封装,在类中我们可以赋予它对象行为的内涵。
|
4
nekochyan 2022-07-09 10:24:10 +08:00
我觉得你不是对 Python 中的类和函数有疑问,而是你对类和函数的概念都没有搞清楚
|
5
yuelang85 2022-07-09 10:25:17 +08:00
你这么想:
类内部的函数之间可以通过 “非传参” 以及 “非全局变量” 的形式共享资源。 基于这个思路,你可以想象 class 内部函数 都属于 “同一类” 函数 |
6
huzhikuizainali OP |
7
Loovemaker 2022-07-09 11:43:55 +08:00
a
|
8
Loovemaker 2022-07-09 11:53:20 +08:00
Hi ,@huzhikuizainali:
> 为什么说类“类内部的函数之间可以通过 “非传参” 以及 “非全局变量” 的形式共享资源。”呢? “非全局变量”好理解,资源都封装在 class 里面了; 我对“非传参”的理解是:写在 class 里面的几个 def 实际是属于 class 的。Python 的确是用一个小语法糖,把`People.selfintro(P1)`转换成了`P1.selfintro()`,看起来好像是要传入`self`作为参数。 但是,这是 Python 要求的,在很多面向对象编程的环境(其它语言)中,是不需要开发者写这个传入`self`的操作的,那种情况下开发者就算不传也不写,编译器也能知道;以我的毕生所学,这样才是主流? 额,上面那条 a 有办法清理嘛? |
9
yuelang85 2022-07-09 14:22:43 +08:00
@huzhikuizainali
因为代码没排版,我没细看,所以我当时就是回复你 “类” 和 “函数” 的关系。其实也就解释了你第一第二个问题。什么使用类?什么时候把函数放在类里面?什么时候使用独立函数? 使用类,你处理一组资源的时候,你只需要携带一个对象,修改对象属性,查看对象属性,只需要 “对象.修改 xxxx()“就可以了。 不使用类,这一堆属性,函数,互相之间没有关联,要想互相作用,就需要传参,比如 “修改 xxxx(xxxx)“ 第五行报的什么错? 你第三个问题,老师实际想说的 init 函数里面的内容 是在定义属性。selfintro 的内容 是在“做具体行为”。 你是在“编程猿” 学的吗?这个代码风格和说话风格都很。。。java 。我觉得你不如买一本 python 书来看看。 |
10
fbichijing 2022-07-10 01:22:38 +08:00
多写,多看。
觉得老师的话没道理,就不要听。 |
11
llsquaer 2022-07-11 14:34:30 +08:00
别绕,最开始被老师带到沟里了...讲了一堆概念.完全不理解.. 后来自己写多了总结出来..
类 , 就是把相关的函数打包在一起搞事情 函数 , 单纯就处理某个事情 比如. 你写一个爬虫. 每个页面都要 请求网站 , 解析提取 , 要存储 正常情况下..函数都不用一直往下写,都是没问题的, 只要你思维清晰.不嫌代码多 后来觉得代码太长了..而且有很多是相同的代码..这个时候你想起来需要函数封装一些常用功能..这里你用了函数.比如,请求取名 my_request ,提取数据 get_value , 存储 save_db 然后你把 提取网页, url 去重,,存储数据库,的步骤都写成函数了..后来发现..函数巨多..搞的头晕.. 这个时候.你就可以把函数分一个类别.....这 类 的概念不就出来了么? 请求网页一个类别, 存储一个类别, 提取数据一个类别 这就是类.. 后来你更深入的发现..类 是可以多个实例的.互不干扰. 类变量是私有的.和其他类不冲突..恭喜你..类的基本用法已经掌握..剩下的就看你的骚操作 |