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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

08 面向对象编程

發布時間:2023/11/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 08 面向对象编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 介紹

面向對象編程是一種程序設計范式

把程序看做不同對象的相互調用,對現實世界建立對象模型。

面向對象編程的基本思想:

類和實例:

類用于定義抽象類型

實例根據類的定義被創建出來

?

?

2 定義類并創建實例

類通過class關鍵字定義,類名以大寫字母開頭,緊接著是(object),表示該類是從哪個類繼承下來的。

class Person(object):

??? pass

xiaoming = Person()??? #創建實例

xiaohong = Person()

?

3 創建實例屬性

對每一個實例,都可以直接給他們的屬性賦值。

例如,給xiaoming這個實例加上name,gender和birth屬性:

xiaoming = Person()

xiaoming.name = 'XiaoMing'

xiaoming.gender = 'Male'

xiaoming.birth = '1990-1-1'

?

給xiaohong加上的屬性不一定要和xiaoming相同:

xiaohong = Person()

xiaohong.name = 'Xiao Hong'

xiaohong.school = 'No.1 High School'

xiaohong.grade = 2

?

實例屬性可以像變量一樣進行操作:

xiaohong.grade = xiaohong.grade + 1

?

4 初始化實例屬性

Person類在創建的時候就擁有name、gender、birth屬性。

在定義Person類時,可以為Person類添加一個特殊的__init__()方法,當創建實例時,這個方法被自動調用。

__init__()方法的第一個參數必須是self(也可以是別的名字,但建議使用習慣用法)。

class Person(object):

??? def __init__(self, name, gender, birth):

??????? self.name = name

??????? self.gender = gender

??????? self.birth = birth

xiaoming=Person('Xiao Ming', 'Male', '1991-1-1')

xiaohong=Person('Xiao Hong', 'Female', '1992-2-2')

?

5 訪問限制

Python對屬性權限的控制是通過屬性名來實現的。

如果一個屬性由雙下劃線開頭(__),該屬性就無法被外部訪問。

class Person(object):

??? def __init__(self, name):

??????? self.name = name

??????? self._title = 'Mr'

??????? self.__job = 'Student'

>>> p = Person('Bob')

>>> print p.name??? #ok

>>> print p._title??? #ok

>>> print p.__job??? #error

如果一個屬性以"__xxx__"的形式定義,那它又可以被外部訪問了,以"__xxx__"定義的屬性在Python的類中被稱爲特殊屬性。

由很多預定義的特殊屬性可以使用,通常不把普通屬性用以"__xxx__"定義。

?

6 創建類屬性

相當于java類的靜態變量。

class Person(object):

??? address = 'Earth'??? #類屬性

??? def __init__(self, name)

??????? self.name = name

?

可以直接訪問類屬性,而不必通過類的實例訪問。

>>> print Person.address??? #Earth

?

類屬性也可以動態添加和修改:

Person.address = 'China'

在實例上修改類屬性時,實際上并沒有修改類屬性,而是給實例綁定了一個實例屬性。

當實例屬性和類屬性重名時,實例屬性優先級高,它將屏蔽掉對類屬性的訪問。

所以千萬不要在實例上修改類屬性。

?

7 定義實例方法

一個實例的私有屬性就是以__開頭的屬性,無法被外部訪問。

實例的方法就是在類中定義的函數,它的第一個參數永遠是self,指向調用該方法的實例本身,其他參數和一個普通函數完全一樣。

class Person(object):

??? def __init__(self, name):

??????? self.__name = name

??? def get_name(self):

??????? return self.__name

?

在class中定義的實例方法其實也是屬性,它實際上是一個函數對象。

?

8 定義類方法

相當于java的靜態方法

和屬性類似,方法也分實例方法和類方法

通過@classmethod可以將方法綁定到類上,類方法的第一個參數將傳入類本身,通常將參數命名為cls。

class Person(object):

??? count = 0

??? @classmethod

??? def how_many(cls):

??????? return cls.count

??? def __inti__(self, name):

??????? self.name = name

??????? Person.count = Person.count + 1

?

>>> print Person.how_many()

?

>>> p1 = Person('Bob')

>>> print Person.how_many()

?

因為是在類上調用,而非實例上調用,因此類方法無法獲得任何實例變量,只能獲得類的引用。

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的08 面向对象编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。