日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 完全面向对象_python 面向对象(一)

發(fā)布時(shí)間:2024/1/23 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 完全面向对象_python 面向对象(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

面向?qū)ο笕Q Object Oriented Programming 簡(jiǎn)稱OOP,是一種編程思想。是把對(duì)象作為一個(gè)程序的基本單元,把數(shù)據(jù)和功能封裝在里面,能夠?qū)崿F(xiàn)很好的復(fù)用性,靈活性和擴(kuò)展性。

基本概念:

面向?qū)ο笫且环N抽象,有兩個(gè)基本概念:類和對(duì)象。

類是定義一件事物的抽象特點(diǎn),而對(duì)象是類的一個(gè)實(shí)例。

例子:例如程序員是一個(gè)類,而具體的一個(gè)人,比如我就是一個(gè)對(duì)象。

基本要素:

屬性和方法。以程序員為例。程序員具體下面屬性和功能:

屬性:年齡,性別和身高。

功能(方法):寫代碼,修電腦。

繼承:

面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實(shí)現(xiàn)這種重用的方法之一是通過繼承機(jī)制。繼承完全可以理解成類之間的類型和子類型關(guān)系。

多態(tài):

用一個(gè)類繼承幾個(gè)不同的類,調(diào)用同一方法的時(shí)候,會(huì)有不同的反應(yīng)。

實(shí)戰(zhàn)一、定義類:

class ClassName:

statement1

...

statement2

構(gòu)造函數(shù)

def init(self,[...):

析構(gòu)函數(shù),在銷毀一個(gè)對(duì)象時(shí)使用的,當(dāng)調(diào)用python垃圾回收的時(shí)候,才會(huì)調(diào)用。

def del(self,[..):

兩個(gè)內(nèi)建函數(shù):

dir()返回一個(gè)對(duì)象的屬性

type() 返回一個(gè)對(duì)象的類型

實(shí)戰(zhàn)二、定義類的屬性

1、直接在類里定義

類的對(duì)象會(huì)被所有類的對(duì)象所共享,所有類的屬性都一樣。

class Programer(object):

sex = 'male'

2、在構(gòu)造函數(shù)里定義

class Programer(object):

def __init__(self,name,age):

self.name = name

self.age = age

python的類沒有訪問權(quán)限的問題,也就是說所有的變量都是可訪問的。實(shí)際上python有私有的機(jī)制,就是在屬性前加__,但是這種私有機(jī)制實(shí)際上也是偽私有,因?yàn)樗鋵?shí)是用一個(gè)別名來保存這個(gè)屬性。例如在類A中的self.__a = 4, 實(shí)際上__a被修改成了_A__a保持在類中了。

3、常用屬性定義

class Programer(object):

def __init__(self,name,age,weight):

self.name = name # 可以公開訪問

self._age = age # 類的私有屬性,但仍然可以訪問

self.__weight = weight # 實(shí)現(xiàn)了部分私有屬性

class Programer(object):

hobby = 'Play Computer'

def __init__(self, name,age,weight):

self.name = name

self._age = age

self.__weight = weight

def get_weight(self):

return self.__weight

if __name__ == '__main__':

programer = Programer('Albert',25,80) # 將對(duì)象實(shí)例化

print(dir(programer)) # 打印所有屬性

print(programer.__dict__) # 從構(gòu)造函數(shù)里獲得的屬性

print(programer.get_weight()) # 獲取weiht 屬性的方法

print(programer._Programer__weight) #

print(programer.name)

運(yùn)行結(jié)果:

['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_weight', 'hobby', 'name']

{'_age': 25, '_Programer__weight': 80, 'name': 'Albert'}

80

80

Albert

實(shí)戰(zhàn)三、定義類的方法

函數(shù)和方法介紹:

函數(shù):是直接調(diào)用函數(shù)名調(diào)用的。

方法:必須是類的一部分,由別的程序來調(diào)用的。

@classmethod

調(diào)用的時(shí)候用類名,而不是某個(gè)對(duì)象。

@property

像訪問屬性一樣調(diào)用方法。

class Programer(object):

hobby = 'Play Computer'

def __init__(self, name,age,weight):

self.name = name

self._age = age

self.__weight = weight

@classmethod

def get_hobby(cls):

return cls.hobby

@property

def get_weight(self):

return self.__weight

def self_introduction(self):

print(('My Name is %s\nI am %s years old\n') % (self.name,self._age))

if __name__ == '__main__':

programer = Programer('Albert',25,80)

print(dir(programer))

print(Programer.get_hobby()) # 類方法調(diào)用的函數(shù)

print(programer.get_weight) # 已屬性的方式調(diào)用的函數(shù)

programer.self_introduction()

運(yùn)行結(jié)果:

['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight', 'hobby', 'name', 'self_introduction']

Play Computer

80

My Name is Albert

I am 25 years old

實(shí)戰(zhàn)四、類的繼承

繼承的子類:

1、會(huì)繼承父類的屬性和方法;

2、也可以自己定義,覆蓋父類的屬性和方法

用super()調(diào)用父類的方法:

class A(object):

def method(self,arg):

pass

class B(A):

def method(self,arg):

super(B,self).method(arg)

用類名調(diào)用父類的方法:

class A(object):

def method(self,arg):

pass

class B(A):

def method(self,arg):

A.method(arg)

子類的類型判斷:

isinstance # 判斷類型

issubclass # 判斷是否是子類

class Programer(object):

hobby = 'Play Computer'

def __init__(self, name,age,weight):

self.name = name

self._age = age

self.__weight = weight

@classmethod

def get_hobby(cls):

return cls.hobby

@property

def get_weight(self):

return self.__weight

def self_introduction(self):

print(('My Name is %s\nI am %s years old\n') % (self.name,self._age))

class BackendProgramer(Programer):

def __init__(self,name,age,weight,language):

super(BackendProgramer,self).__init__(name,age,weight)

self.language = language # 定義language這個(gè)屬性

if __name__ == '__main__':

programer = BackendProgramer('Albert',25,80,'Python')

print(dir(programer))

print(programer.__dict__)

print(type(programer))

print(isinstance(programer,Programer)) # 判斷是否是Programer這個(gè)類

運(yùn)行結(jié)果:

['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight', 'hobby', 'language', 'name', 'self_introduction']

{'_Programer__weight': 80, '_age': 25, 'language': 'Python', 'name': 'Albert'}

True

實(shí)戰(zhàn)五、類的多態(tài)

多態(tài)的要素:繼承和方法重寫

class Programer(object):

hobby = 'Play Computer'

def __init__(self, name,age,weight):

self.name = name

self._age = age

self.__weight = weight

@classmethod

def get_hobby(cls):

return cls.hobby

@property

def get_weight(self):

return self.__weight

def self_introduction(self):

print(('My Name is %s\nI am %s years old\n') % (self.name,self._age))

class BackendProgramer(Programer):

def __init__(self,name,age,weight,language):

super(BackendProgramer,self).__init__(name,age,weight)

self.language = language

# 重寫父類的 self_introduction方法

def self_introduction(self):

print(('My Name is %s\nMy favorite language is %s\n') % (self.name,self.language))

# 判斷傳進(jìn)來的參數(shù)是否屬于Programer對(duì)象,如果是,直接調(diào)用對(duì)象的self_introduction()方法

def introduce(programer):

if isinstance(programer,Programer):

programer.self_introduction()

if __name__ == '__main__':

# 將對(duì)象實(shí)例化

programer = Programer('Albert',25,80)

backend_programer = BackendProgramer('Tim',30,70,'Python')

introduce(programer)

introduce(backend_programer)

運(yùn)行結(jié)果:

My Name is Albert

I am 25 years old

My Name is Tim

My favorite language is Python

多態(tài)優(yōu)點(diǎn):

添加功能比較簡(jiǎn)單,只要判斷是否屬于這個(gè)父類,而不需要判斷傳進(jìn)來的是哪個(gè)子類,直擊調(diào)用這個(gè)方法。

總結(jié)

以上是生活随笔為你收集整理的python 完全面向对象_python 面向对象(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。