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()

?

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

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387107.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387107.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387107.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H5+jqweui實現手機端圖片壓縮上傳 Base64

H5jqweui實現手機端圖片壓縮上傳主要功能,使用H5的formData上傳base64格式的圖片,canvas壓縮圖片,前端樣式使用weui,為方便起見,使用了jquery封裝過的weui,jqweui。話不多少,開始上代碼。前端代…

09 類的繼承

繼承一個類 class Person(object): def __init__(self, name, gender): self.name name self.gender gender class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score score 判斷類型 isinstance()可以…

vue 中v-if 與v-show 的區別

相同點或者說功能,都可以動態操作dom元素的顯示隱藏 不同點: 1.手段:v-if是動態的向DOM樹內添加或者刪除DOM元素;v-show是通過設置DOM元素的display樣式屬性控制顯隱;2.編譯過程:v-if切換有一個局部編譯/卸…

vue打包后放在 nginx部署時候的配置文件

部署了三套程序,默認的,admin和design#user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }http {include …

淘淘商城之技術選型、開發工具和環境、人員配置

一、技術選型 1)Spring、SpringMVC、Mybatis 2)JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本編輯器)、CSSDIV 3)Redis(緩存服務器) 4)Solr(搜索&#x…

啟動代碼格式:nginx安裝目錄地址 -c nginx配置文件地址

啟動啟動代碼格式:nginx安裝目錄地址 -c nginx配置文件地址 例如:[rootLinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf停止nginx的停止有三種方式: 從容停止1、查看進程號[rootLinuxServer ~]# ps -ef…

Lecture 3 Divide and Conquer

1.Divide the problem(instance) into one or more sub-problem; 2.Conquer each sub-problem recursively; 3.Combine solutions.

Maven報錯找不到jre

富人之所以越來越富,窮人之所以越來越窮,中產階級之所以總是在債務泥潭中掙扎,其主要原因之一在于他們對金錢的觀念不是來自學校,而是來自家庭。 ---《窮爸爸富爸爸》 一、報錯提示 常規配置maven環境變量,報錯&#x…

vue按照url地址訪問出錯404

問題描述: 最近在開發cms的時候使用Vue.js框架,利用vue-route結合webpack編寫了一個單頁路由項目,自己在服務器端配置nginx。部署完成后,訪問沒問題,從頁面中點擊跳轉也沒問題,但是只要點擊刷新或通過瀏覽器…

Lecture 4 Quick Sort and Randomized Quick Sort

Quick Sort --Divide and Conquer --Sorts “in place” --Very practical with tuning Divide and Conquer: 1.Divide: Partition array into 2 sub-arrays around pivot x such that elements in lower sub-array < x < elements in upper sub-array; 2.Conquer: …

HDU 3966 樹鏈剖分后線段樹維護

題意: 一棵樹, 操作1.$path(a,b)$之間的點權$k$ 操作2.單點查詢 題解: 樹鏈剖分即可,注意代碼細節,雙向映射 主要是記錄一下板子 #include <string.h> #include <stdio.h> #include <algorithm> #define endl \n #define ll long long #define ull unsigned …

VUE config/index.js文件配置

&#xfeff;&#xfeff; 當我們需要和后臺分離部署的時候&#xff0c;必須配置config/index.js: 用vue-cli 自動構建的目錄里面 &#xff08;環境變量及其基本變量的配置&#xff09;123456789101112131415var path require(path)module.exports {build: {index: path.res…

數據規則列表加導入導出

1.進入bos&#xff0c;打開數據規則&#xff0c;進入列表菜單 2.點擊事件-新增操作 3.點擊新增 4.點擊操作類型&#xff0c;輸入%引入 5.點擊確定&#xff0c;保存后生效&#xff0c;導出 、引入模板設置同理轉載于:https://www.cnblogs.com/RogerLu/p/10643521.html

Lecture 6 Order Statistics

Given n elements in array, find kth smallest element (element of rank k) Worst-case linear time order statistics --by Blum, Floyd, Pratt, Rivest, Tarjan --idea: generate good pivot recursively. Not so hot, because the constant is pretty big.

C++ qsort() 函數調用時實參與形參不兼容的問題解決

《劍指OFFER》刷題筆記 —— 撲克牌順子 LL今天心情特別好,因為他去買了一副撲克牌,發現里面居然有2個大王,2個小王(一副牌原本是54張^_^)...他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿&#xff01;&#xff01;“紅心A…

linux jenkins部署之路之,ftp部署怎么匿名還好用咋解決思密達

怎么安裝就不說了&#xff0c;網上一堆 這噶搭是配置 目錄是/etc/vsftpd/vsftpd.conf # Example config file /etc/vsftpd/vsftpd.conf# # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more u…

powerCat進行常規tcp端口轉發

實戰中&#xff0c;我們也會遇到需要我們進行端口轉發的情況&#xff0c;比如已經拿下的目標機1是在dmz區&#xff0c;而目標1所在內網的其他目標只能通過目標1去訪問&#xff0c;這時候我們就需要端口轉發或者代理來進行后滲透。這次就要介紹一個加強版的nc&#xff0c;基于po…

Lecture 7 Hashing Table I

Hash |---Hash function: Division, Multiplication |---Collision: Chaining, Open addressing(Linear,Double hasing) Symbol-table problem: Table S holding n records pointer --> key|satelite data (record) Hashing: Hash function h maps keys “randomly”…

SpringCloud 微服務

一微服務架構概述1.1 微服務特性以及優點每個服務可以獨立運行在自己的進程里一系列獨立運行的微服務(goods,order,pay,user,search…)共同構建了整個系統每個服務為獨立的業務開發&#xff0c;一個微服務只關注某個特定的功能&#xff0c;例如用戶管理&#xff0c;商品管理微服…