无标题无名氏No.62474737 只看PO
2024-05-22(三)00:09:43
ID:ZNSiC4R 回应
從哪個角度比較容易搞懂Python的Class?
小肥到現在還是用def來寫python的工具,但是前輩們丟出的代碼都是用物件導向寫的
因此萌生想了解Class的思路
資源的話小肥自己會找,之前也有上過相關的網課
但是怎麼看跟練習都不是很懂的透徹
請問肥哥們是從哪個角度去理解Class的呢?
JP
无标题无名氏No.62478724
2024-05-22(三)12:02:13 ID: ZNSiC4R (PO主)
>>No.62475835
朋友有跟小肥說只要會用main就已經很厲害了(つд⊂)
所以肥哥的意思是物件導向的程式是建構在實體化的類上面
類需要添磚加瓦,加入屬性跟方法,難怪當時網課的時候老師會花很多時間講UML
因為類的屬性跟方法沒有先定義好的話,造出來的肥肥這個類可能在實體化的時候會對流程影響很大……吧( ゚∀。)7
也感謝肥哥的闡釋( ˇωˇ)人
>>No.62476749
之後會需要碰FastAPI的項目,到時候也逃不了類的摧殘的
……還有踏馬的裝飾子口牙(╬゚д゚)
非常感謝肥哥們的回覆( `д´)7
无标题无名氏No.62479110
2024-05-22(三)12:39:26 ID: OX2B1Pi
>>No.62478550
總之肥哥能懂就行( ゚∀。)
以及睡醒後還想到了一個大概能幫助肥哥理解的解釋
那就是Python本身是不太強調類型這個東西的,所以說用起來非常方便,但是對類的理解會有些薄弱
舉個例子,當用上文件操作的時候,首先要獲取到這個文件對吧?通常來說用的是變量賦值或者是with語句,那麽你所獲得的file變量其實就是類的實例啦。
在Python中,直接這樣寫
myfile = 獲取文件的方法
這個代碼寫全的話,應該是
File myfile = 獲取文件的方法
File就是文件類,表明你的變量是該類的一個實例,myfile就是你的實例,你的一切實際操作都是建立在你所獲取的實例myfile上的,這樣的(`・ω・)
那麽前面提到了類是模板,實例是寫入了數據的實際物體,在上文提到的例子中,數據是在哪裏寫入的呢?答案是 獲取文件的方法 這一步。
我對Python記憶不深,但是這個方法應該要傳入文件路徑編碼方式之類的,在類的內部,有一些函數,Python中我不清楚叫什麼,但是C#中它被稱為構造函數,會在實例被創建時進行調用並完成實例的初始化,這個例子就可以理解為我向類的構造函數種提供了參數,隨後生成了類的實例。(`・ω・)
感覺又有些說多了,總之肥哥能夠理解就太好了( ゚∀。)
順便教給肥哥一個特別好的理解類的辦法,就是手動寫一個列表MyList類,並且完成列表List本身可以實現的大部分功能,我當時學C#就是這麽乾的( ゚∀。)
對的,說到這裏吐槽一句,列表其實也是個類,除了最基礎的數據類型,比如字符串,數字之類的,其他的都是類( ゚∀。)
无标题无名氏No.62479343
2024-05-22(三)13:02:37 ID: YdWBvB8
原来那边把object oriented翻译成“物件导向“,感觉比“面向对象“这个翻译还要好|∀` )
不过python其实既不是完全面向对象也不是完全面向过程的,如果要理解透彻的话确实是参考一下完全面向过程(C)和完全面向对象(C#/java)语言比较好。
比如在C语言的字符串操作,是通过string.h下的一系列函数实现的。比如我要连接“nmb“和“xd“两个字符串,写法是这样的
char2[0,6] s1 = “nmb“;
char1[0,3] s2 = “xd“;
strcat(s1,s2);
这样s1的值就成了 “nmbxd“
但是想必po也知道了,这在python里只需要一个+号就可以了
这是因为python的str就是一个类,加法运算符实际上是调用了它的__add__方法(函数),不过python并不强制必须面向对象,于是以下三种写法结果是相同的
'nmb'+'xd'
'nmb'.__add__('xd')
str.__add__('nmb','xd') #这就是面向过程的写法
__add__方法就是python约定的用于重载加法算符的方法,因此我们自己写一个class 然后def 这个方法,就可以在自己定义的这个类上直接使用加法算符进行运算,po可以试试照着这个思路来实现一个支持基本数学算符的 分数/复数 之类的class,比如要实现分数,就需要两个字段来存储分子和分母,复数就是分别存储实部和虚部,然后分别def __add__
__sub__之类的运算符方法,这样自己实现的class也可以直接使用加减乘除符号进行数学运算,这就是类的方法表示带来的遍历,对于面向过程的情况,就没法这样实现,因为函数和数据类型不是绑定在一起的,而和一个class绑定的函数(即它的第一个参数是self)就叫做这个class的method