无标题无名氏No.62474737 只看PO
2024-05-22(三)00:09:43
ID:ZNSiC4R 回应
從哪個角度比較容易搞懂Python的Class?
小肥到現在還是用def來寫python的工具,但是前輩們丟出的代碼都是用物件導向寫的
因此萌生想了解Class的思路
資源的話小肥自己會找,之前也有上過相關的網課
但是怎麼看跟練習都不是很懂的透徹
請問肥哥們是從哪個角度去理解Class的呢?
JP
无标题无名氏No.62475231
2024-05-22(三)00:47:12 ID: OX2B1Pi
不太清楚肥哥对Python本身及其面向对象编程的理解到了哪种程度,而且我本人是学C#的,总之我尽力回答( ゚∀。)
以概念去描述的话,class,类,其自身是一个空的待定义的容器,你可以向这个容器中放入变量,或者是方法,或者是别的什么东西。此时类就变成了承载了数据的有定义的概念,换句话说就是模板,然后就可以通过这个概念实例化出具体的对象,然后去操作对象,这就是面向对象编程了。
举例的话,首先我们命名了一个类Cat,此时类是空的,只能从名字上窥见开发人员想将这个类作为猫模板来使用,那么为了达成这一目的,就需要向类中添加猫该有的变量或方法,比如体重,以及叫这一动作。
然后,在别处,我们需要一个猫来叫唤几声,那么就通过这个类来生成这个实例,比如说几把猫,然后这个几把猫才是我们实际操作的对象,调用方法 几把猫.叫唤() 才是我们需要的(`・ω・)
无标题无名氏No.62475372
2024-05-22(三)01:02:11 ID: OX2B1Pi
然后这其实只是举例,在实际运用的过程中,类的运用往往会抽象很多(`・ω・)
这里我斗胆猜测一下肥哥目前的Python使用进度,应该还停留在“出现问题→新建py文件→编写方法→执行脚本”这一步骤?
那我可以大胆地告诉你,你所创建的py文件实际上就是一个类,执行脚本实际上就是执行了类中的直接运行的代码,随后输出结果到控制台或是别的指定输出位置。
你可以将脚本文件中那些直接运行的代码行也放到方法中,然后给整个文件加上缩进与类的定义符,这时候一个属于你自己的类就创建出来啦!
对类的理解不深可能也是因为Python中直接编写可运行脚本这种方法已经足够应付大部分情况,所以类使用得比较少,因此认识不深
无标题无名氏No.62475492
2024-05-22(三)01:18:12 ID: OX2B1Pi
然后得益于Python的易用性,我发现我很难讲清楚class是个什么,虽然看上去打了几大段文字,但是感觉在说囫囵话,不晓得肥哥能不能懂( ゚∀。)
总之接下来再试试混合教学的方法( ゚∀。)
在C#学习中,我们面对的不是一个简单的,可以直接写下代码并运行的界面,而是一个程序入口类Program,以及一个主方法,但我忘记叫什么了,总之暂定为Init吧
在最初的学习当中,都是直接在这个Init中编写代码,随后直接运行,此阶段跟Python基本相同
随后开始学习怎么写方法,也可以叫它函数,总之就是Python中的def,与Python不同的是,我们的C#方法不能写在这个Init主方法之中,那么写在哪里呢?答案是Program类下,然后在Init主方法调用
再下一个阶段,我们需要做一些实际的东西出来了,比如说最常见的,统计学生的姓名班级年龄并逐个输出,我们当然可以选择在主函数内创建几个列表分别存储这几个数据,然后按索引遍历输出,但更聪明的方法是,我们将同属于一个学生的信息存储在学生自身身上,并让学生“自己报出自己的信息”,此时我们就需要写下一个类Student,它与Program类同级,这个类内包括了姓名班级年龄等变量,以及一个方法,方法功能是在屏幕上输出自己这几个变量的值。随后在主方法上实例化每个学生,并在实例化的时候给出给每个变量具体复制,然后调用实例的方法即可(`・ω・)
再下一个阶段,就是正经开始解决问题了,这时候你会发现自己需要非常多的方法,需要在非常多的地方存储或传输数据,你需要一个地方将同类的,或者应该放在一起的方法及数据放在一起,那也是类的功能,此时类就开始五花八门了起来,比如说数学类Math,甚至是角色管理器类CharacterManager等等(`・ω・)
无标题无名氏No.62475523
2024-05-22(三)01:21:47 ID: OX2B1Pi
然后我感觉我讲得还是有点杂七杂八的( ゚∀。)
总之Python类实在难以理解的话可以看看别的,比如C#,虽然后者也经过了高度的简化以方便非计算机人员学习,但是比Python要……想不出更好的形容词……更有条理一些吧,或者说更符合程序规律?
总之我觉得我全篇最能概括的一句就是“简单理解的话,每个单个的py文件其实就是一个类”( ゚∀。)
无标题无名氏No.62475835
2024-05-22(三)02:12:23 ID: QbwxZDS
py更倾向于脚本吧,跟c#的类在运作还是有些出入的
主方法是main( ゚∀。)7
类就是一个有数据(称为属性)和行为(称为方法)的独立的概念,例如猫,狗,动物,植物这些。属性和方法相互作用,相互统一。
而类只是一个概念,如果要使用它需要有一个实例。例如肥肥这个类,他可能有实例OX2,ZNS等等,里面有如饼干这样的属性和如回复这样的方法
无标题无名氏No.62478550
2024-05-22(三)11:45:09 ID: ZNSiC4R (PO主)
>>No.62475231
謝謝肥哥的解釋,我嘗試著一邊翻書一邊理解快多了
我的理解如下:
總之來說,class剛定義的時候只是一個記憶體的位置
要往裡面添磚加瓦,class才會漸漸有實質上的意義,也就是您說的模板
當實體化(這裡不是呼叫)一個class的時候,就創造出了一個物件,對此再添磚加瓦就是物件導向的程式了
>>No.62475372
對,我就是因為範例與實際比起來實際操作太過抽象所以會很頭痛(つд⊂)
不愧是肥哥,我的確是使用單一腳本來編寫流程後執行,因為只要能滿足需求就可以交差了(つд`゚)
原來py文件也是一個類呀……難怪小肥發現文件檔名跟import的模組相同時會輸出錯誤( ゚∀。)
這下是python搞不懂該呼叫自己本身還是去找同名的模組去了
將腳本拆開成幾個py檔最近有實做過,不過就只是把def的函式抽出到其他文件,然後當成moudle import進來,原來這樣就是新增了類嗎
但是肥哥說的把文件加上類定義我可能要再多看看人家寫好的代碼,因為真的如肥哥所說,類使用的太少了所以認識不深……
>>No.62475492
不不不,肥哥已經講解得很清楚了
小肥學過點C,所以肥哥這裡的講解我多少能體會了
在學生的範例中我大概可以理解,如果把學生的資料都用Dict或是List的資料類型儲存起來的話,之後要管理會非常蛋疼
但是如果把學生變成類,那更新或是提取資料會變得相當的容易,因為不再是資料類型,而是一個實體化後的物件
而物件操作比一堆資料操作會簡便許多……吧( ゚∀。)
>>No.62475523
我個人會覺得Python是方便入門的,雖然小肥會的並不多
謝謝肥哥最後的總結,一句話點醒迷糊小肥
感謝肥哥( ˇωˇ)人