python创建对象的格式为_Python入门基础学习(面向对象)
python基礎學習筆記(四)
面向對象的三個基本特征:
封裝:把客觀事物抽象并封裝成對象,即將屬性,方法和事件等集合在一個整體內
繼承:允許使用現有類的功能并在無須重新改寫原來的類情況下,對這些功能進行拓展
多態性:派生類具有基類的所有非私有數據和行為以及新類自己定義的所有數據或行為,即子類具有兩個有效類型:子類的類型及其繼承基類的類型。對象可以表示多個類型的能力稱為多態性
類與對象的概念:
類和變量是面向對象編程的兩個核心概念
類:對一群具有相同特征(屬性)或者行為(方法)的事物一個統稱,抽象的,如:王者榮耀里的泛指的英雄
對象:由類創建出來的一個具體存在,可以直接使用,如:英雄中的李白
類的設計:
1.類型:滿足大駝峰命名法(每個單詞首字母大寫,單詞與單詞之間沒有下劃線)
2.屬性:事物具有什么樣的特征
3.方法:事物具有什么樣的行為
屬性與方法的確定:
1.對對象特征的描述,可以定義成屬性
2.對象具有的行為(動詞),通常可以定義成方法
類的定義以及創建對象:
類定義的格式:
創建對象格式:
實例屬性:
通過"self.變量名"定義的屬性,稱為實例屬性,也稱為實例變量,每個實例包含類的一個單獨副本
初始化(一般在__int__函數中):self.實例變量名 = 初始值
其他函數中可以通過self訪問:self.實例變量 = 值
創建對象實例,通過對象訪問:obj1.實例變量名 = 值
例子:
class person:
def __init__(self,name,age):
self.name = name
self.age = age
def say_hi(self):
print('您好!我叫%s'%(self.name))
person = person('hhs','21')
person.say_hi()
print('今年{0}'.format(person.age))
輸出:
您好!我叫hhs
今年21
類屬性:
python也允許聲明屬于類本身的變量,即類變量、靜態屬性
類屬性屬于整個類,不是特定實例的一部分,而是所有實例之間共享的一個副本
初始化(一般在類體中):類變量名 = 初始值
類的訪問:類名.類變量名 = 值
例子:
class person:
count = 0
name = "hhs"
#test
person.count += 1
print(person.count) #1
print(person.name) #hhs
p1 = person()
p2 = person()
print((p1.name,p2.name)) #('hhs', 'hhs')
person.name = '華南理工大學廣州學院'
print((p1.name,p2.name)) #('華南理工大學廣州學院', '華南理工大學廣州學院')
p2.name = '計算機科學與技術'
print((p1.name,p2.name)) #('華南理工大學廣州學院', '計算機科學與技術')
p2.count += 1
print((person.count,p1.count,p2.count)) #(1, 1, 2)
說明:
類屬性如果通過‘obj.屬性名'訪問,則屬于該實例的實例屬性,雖然類屬性可以使用對象實例來訪問,但這樣容易造成困惑。所以建議不要這樣使用,而是應該使用標準的訪問方式:類名.類變量名
私有屬性和公有屬性:
python類的成員沒有訪問控制限制,與其他面向對象的語言不同
通常約定兩個下劃線開頭且吧不以兩個下劃線結束的屬性為私有(private),其他為公共(public)
不能直接訪問私有屬性,但可以在方法中訪問
class a:
__name = 'class a'
def get_name():
print(a.__name)
#test
a.get_name() #class a
a.__name #attributeerror: type object 'a' has no attribute '__name'
特殊屬性:
以雙下劃線開始和結束的方法,稱為特殊方法
常見的特殊方法:
object.__dict__ 對象的屬性字典
object.__class__ 對象所屬的類
class.__bases__ 類的基類元組
class.__bases__ 類的基類
class.__name__ 類的名字
class.__mro__ 方法查找順序,基類的順序
class.__subclasses__() 子類序列
class person:
def __init__(self,name,age):
self.name = name
self.age = age
def say_hi(self):
print('您好!我叫%s'%(self.name))
person = person('hhs','21')
print(person.__dict__) #object.__dict__ 輸出:{'name': 'hhs', 'age': '21'}
print(person.__class__) #object.__class__ 輸出:
print(person.__bases__) #class.__bases__ 輸出:(,)
print(person.__base__) #class.__base__ 輸出:
print(person.__name__) #class.__name__ 輸出:person
print(person.__mro__) #class.__mro__ 輸出:(, )
print(person.__subclasses__()) #class.__subclasses__() 輸出:[]
實例方法:
類方法的第一個參數一般為self,這種方法稱為實例方法
格式:def 方法名(self,[形參列表]):函數體
注意:第一個參數雖然為self,但是調用時,用戶不需要傳給該參數值(self相當于this)
class person:
def say_hi(self,love):
# self.love = love 這句不寫也可以正常輸出
print('我喜歡的游戲為{0}'.format(love))
p = person()
p.say_hi('自由幻想手游')
靜態方法:
python允許聲明屬于與對象實例無關的方法,稱為靜態方法,靜態方法不對特定實例進行操作,在靜態方法中訪問對象實例會報錯。靜態方法通過裝飾器@staticmethod來定義,其聲明格式如下:
@staticmethod
def 靜態方法名([形參列表]):
函數體
#靜態方法一般通過類名來訪問,也可以通過對象實例來調用
#如:類名.靜態方法名([實參列表])
例子:
class temperature:
@staticmethod
def c2f(t_c): #將攝氏度轉換為華氏溫度
t_c = float(t_c)
t_f = (t_c * 9/5) + 32
return t_f
類方法:
python也允許聲明屬于類本身的方法,即類方法。類方法不對特定實例進行操作,通過@classmethod來定義,第一個形參必須為類對象本身,通常為cls,格式如下:
@classmethod
def 類方法名(cls,[形參列表]):
函數體
#類方法一般通過類名來訪問,也可通過對象實例調用
#格式如下
類名.類方法名([實參列表])
例子:
class foo:
classname = 'foo'
def __init__(self,name):
self.name = name
def f1(self):
print(self.name)
@staticmethod
def f2():
print('static')
@classmethod
def f3(cls):
print(cls.classname)
__init__方法(構造函數)和__new__方法:
python類中,可以定義特殊的方法:__new__方法和__init__方法
__new__是一個類方法,創建對象時調用,返回當前對象的一個實例,一般無須重載該方法
__init__是一個構造函數,用于執行類的實例和初始化工作,創建完對象后調用,初始化當前對象的實例,無返回值
__del__方法(析構函數):
python類體中,可以定義一個特殊的方法__del__方法
用于實現銷毀類的實例所需的操作,如釋放占用的非托管資源(打開的文件,網絡連接等)
默認情況下,對象不再被使用時,__del__方法運行,由于python解釋器實現自動垃圾回收,無法保證這個方法何時運行
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的python创建对象的格式为_Python入门基础学习(面向对象)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP与MySQL连接菜鸟教程_PHP
- 下一篇: mysql没有makefile_make