很不想跟你說, 你思維一片混亂. 根本不適合寫程序.
先搞清楚類和對象的區別再說吧.
-----------------------------------
你的態度很好, 我的態度不好,我道歉.
1 類和對象是兩種不同的概念, 類是一個抽象的定義, 對象是一個實際的實體. 我不想抄書, 舉個例子, "人"是一個類. "某人"就是一個對象
對於你的問題, Liste是一個類, i.first裡面的這個i,就是一個對象(稱為Liste對象)。 i.first=n,表示修改了i這個對象的first屬性。 如果還有其它Liste對象, 這些對象的first值並不與i的first相關。
然後, 你說的class的屬性的初始值,這個說法並不精確。 因為 first屬性是在__init__方法中定義的, 而__init__方法是初始化任意一個Liste對象時都要調用的方法。因此你理解他為初始值。但是實際上, __init__方法給屬性賦值,與你在外面一個函數給這個屬性賦值沒有大區別。
因此,我這樣總結一下, 比如, 你聲明了兩個Liste對象 i=Liste() j=Liste(), 然後讓i.first=n, 之後, j.first還是依舊等於None, 然後,你又聲明了一個Liste對象, k=Liste(), k.first還是等於None
2 當你定義了一個類, 之後要創建一個這個類的對象, 我們用的方示就是
n=Node(x), 在這里類的名字當成一個函數來用, 而這個函數的參數x, 傳遞進入 None類的 __init__方法中去,也就是def __init__(self, x):這個方法。 因此n 就是一個Node對象,你看到print出來的內容就是表示n是一個None對象, 而其儲存地址是0x0....
3 你的理解是對的。
我建議你學習編程, 還是要從C或者Pascal學起, 把最基本的理論都搞清楚以後,然後再學習C++,弄明白面向對象,最後再學習python, 循序漸進對於打好扎實的基礎是很重要的。
2. python關於class問題 小白求解答
Python編程中類的概念可以比作是某種類型集合的描述,如「人類」可以被看作一個類,然後用人類這個類定義出每個具體的人——你、我、他等作為其對象。類還擁有屬性和功能,屬性即類本身的一些特性,如人類有名字、身高和體重等屬性,而具體值則會根據每個人的不同;功能則是類所能實現的行為,如人類擁有吃飯、走路和睡覺等功能。具體的形式如下:
#例:類的概念
class人類:
名字='未命名'#成員變數
def說話(內容):#成員函數
print內容#成員變數賦初始值
某人=人類()#定義一個人類對象某人
某人.名字="路人甲"
某人.說話('大家好')#路人甲說話
>>>大家好!#輸出
Python中定義和使用類的形式為:class 類名[(父類名)]:[成員函數及成員變數],類名為這個類的名稱,而父類名為可選,但定義父類名後,子類則擁有父類的相應屬性和方法。在用類定義成對象時,會先調用__init__構造函數,以初始化對象的各屬性,類的各屬性(成員變數)均可以在構造函數中定義,定義時只要加上對象指針就好了。而在對象銷毀時,則會調用__del__析構函數,定義類的成員函數時,必須默認一個變數(類似於C++中的this指針)代表類定義的對象本身,這個變數的名稱可自行定義,下面例子將使用 self變數表示類對象變數 。
#例:類定義及使用
classCAnimal:
name='unname'#成員變數
def__init__(self,voice='hello'):#重載構造函數
self.voice=voice#創建成員變數並賦初始值
def__del__(self):#重載析構函數
pass#空操作
defSay(self):
printself.voice
t=CAnimal()#定義動物對象t
t.Say()#t說話
>>hello#輸出
dog=CAnimal('wow')#定義動物對象dog
dog.Say()#dog說話
>>wow#輸出
3. 關於python里定義class的問題
它是python語法中固定的方法,主要作用就是創建類實例後做初始化工作,創建時調用__new__,初始化時調用__init__。這些方法叫做魔法方法,由python解釋器調用
4. python類的定義與使用是什麼
類Class:用來描述具體相同的屬性和方法的對象的集合。定義了該集合中每個對象所共有的屬性和方法。對象是類的示例。
類定義完成時(正常退出),就創建了一個 類對象。基本上它是對類定義創建的命名空間進行了一個包裝;我們在下一節進一步學習類對象的知識。原始的局部作用域(類定義引入之前生效的那個)得到恢復,類對象在這里綁定到類定義頭部的類名(例子中是 ClassName )。
基本語法
Python的設計目標之一是讓代碼具備高度的可閱讀性。它設計時盡量使用其它語言經常使用的標點符號和英文單字,讓代碼看起來整潔美觀。它不像其他的靜態語言如C、Pascal那樣需要重復書寫聲明語句,也不像它們的語法那樣經常有特殊情況和意外。
以上內容參考:網路-Python
5. Python中類的定義規是什麼
類的概念:
類 Class: 用來描述具體相同的屬性和方法的對象的集合。定義了該集合中每個對象所共有的屬性和方法。對象是類的示例。
類變數:類變數在整個實例化的對象中是公用的。類變數定義在類中且在函數體之外。類變數通常不作為實例變數使用。
實例變數:定義在方法中的變數,只作用於當前實例的類。
數據成員:類變數或者實例變數用於處理類及其實例對象的相關數據。
方法:類中定義的函數。在類內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self, 且為第一個參數,self 代表的是類的實例。
構造函數:即__init()__,特殊的方法,在對象創建的時候被自動調用。
析構函數:即__del()__,特殊的方法,在對象被銷毀時被自動調用。
實例化:創建一個類的實例,類的具體對象。就是將創建的類賦值給另一個變數。理解為賦值即可,a = class(),這個過程,就叫做實例化
對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變數和實例變數)和方法。
繼承:即一個派生類(derived class)繼承基類(base class)的欄位和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬」是一個(is-a)」關系(例圖,Dog是一個Animal)。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其 進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
————————————————
原文鏈接:https://blog.csdn.net/f156207495/article/details/81166252
網頁鏈接
6. Python中的類屬性和對象屬性的區別詳解
類屬性:
class Employee(object):
emCount=0
def __init__(self,name,salary):
self.nane=name
self.salary=salary
類屬性就是定義類的時候直接定義的屬性 emCount,類似於java裡面的static修飾的屬性,可以直接通過 類名.屬性名訪問:Employee.emCount
實例屬性是在__init()方法中定義的屬性,例如name,和salary,self是指向自己的,類似java的this關鍵字,實際是通過內置的方法setattr()完成的
可以通過重寫setatttr()進行類屬性的增加和獲取
7. python 類的定義
Python編程中類定義,代碼如下:
class<類名>:
<語句>
定義類的專有方法:
__init__構造函數,在生成對象時調用
__del__析構函數,釋放對象時使用
__repr__列印,轉換
__setitem__按照索引賦值
__getitem__按照索引獲取值
__len__獲得長度
__cmp__比較運算
__call__函數調用
__add__加運算
__sub__減運算
__mul__乘運算
__div__除運算
__mod__求余運算
__pow__稱方
代碼如下:
#類定義
classpeople:
#定義基本屬性
name=''
age=0
#定義私有屬性,私有屬性在類外部無法直接進行訪問
__weight=0
#定義構造方法
def__init__(self,n,a,w):
self.name=n
self.age=a
self.__weight=w
defspeak(self):
print("%sisspeaking:Iam%dyearsold"%(self.name,self.age))
p=people('tom',10,30)
p.speak()
8. python類中的 方法 屬性分別什麼意思
就比方說有一個類叫做car
這個類的屬性可以有colorsizebrandpriceyear等描述性的東西
這個類的方法可以是runstopforwardbackward等執行性的東西
classcar:
#定義基本屬性
color=''
size=0
brand=''
price=0
year=0
#定義構造方法
def__init__(self):
self.color=color
self.size=size
self.brand=brand
self.price=price
self.year=year
defrun(self):
print("thecarisrunning")
defstop(self):
print("thecarisstop")
defforward(self):
print("thecarisforward")
defbackward(self):
print("thecarisbackward")
#類調用
benz=car('red',1.8T,'Mercedes',400000,2016)
benz.run()
benz.stop()
benz.forward()
benz.backward()
9. python類的屬性有哪幾種如何訪問它們
屬性的訪問機制
一般情況下,屬性訪問的默認行為是從對象的字典中獲取,並當獲取不到時會沿著一定的查找鏈進行查找。例如a.x的查找鏈就是,從a.__dict__['x'],然後是type(a).__dict__['x'],再通過type(a)的基類開始查找。
若查找鏈都獲取不到屬性,則拋出AttributeError異常。
一、__getattr__方法
這個方法是當對象的屬性不存在是調用。如果通過正常的機制能找到對象屬性的話,不會調用__getattr__方法。
classA:
a=1
def__getattr__(self,item):
print('__getattr__call')
returnitem
t=A()
print(t.a)
print(t.b)
#output
1
__getattr__call
b
二、__getattribute__方法
這個方法會被無條件調用。不管屬性存不存在。如果類中還定義了__getattr__,則不會調用__getattr__()方法,除非在__getattribute__方法中顯示調用__getattr__()或者拋出了AttributeError。
classA:
a=1
def__getattribute__(self,item):
print('__getattribute__call')
raiseAttributeError
def__getattr__(self,item):
print('__getattr__call')
returnitem
t=A()
print(t.a)
print(t.b)
所以一般情況下,為了保留__getattr__的作用,__getattribute__()方法中一般返回父類的同名方法:
def__getattribute__(self,item):
returnobject.__getattribute__(self,item)
使用基類的方法來獲取屬性能避免在方法中出現無限遞歸的情況。
三、__get__方法
這個方法比較簡單說明,它與前面的關系不大。
如果一個類中定義了__get__(),__set__()或__delete__()中的任何方法。則這個類的對象稱為描述符。
classDescri(object):
def__get__(self,obj,type=None):
print("callget")
def__set__(self,obj,value):
print("callset")
classA(object):
x=Descri()
a=A()
a.__dict__['x']=1#不會調用__get__
a.x#調用__get__
如果查找的屬性是在描述符對象中,則這個描述符會覆蓋上文說的屬性訪問機制,體現在查找鏈的不同,而這個行文也會因為調用的不同而稍有不一樣:
其他情況見文末參考資料的文檔
四、__getitem__方法
如果僅僅想要對象能夠通過[]獲取對象屬性可以簡單的:
總結
當這幾個方法同時出現可能就會擾亂你了。我在網上看到一份示例還不錯,稍微改了下: