摘要:目的是簡化調(diào)用者的流程經(jīng)典類裝飾器新式類裝飾器執(zhí)行結(jié)果類屬性方式定義價格描述
面向?qū)ο?/p>
類和對象:類是模版,對象是類創(chuàng)建出來的一個具體的存在
類的三要素:類名(單詞首字母必須大寫,單詞間無下劃線),屬性,方法
使用名詞提煉法來設(shè)計一個類
一)類的基礎(chǔ)
dir(對象) 查看該對象的所有方法和屬性
創(chuàng)建對象:類名()
初始化方法:
當(dāng)使用類名創(chuàng)建對象時,會自動執(zhí)行如下操作
1)為對象在內(nèi)存中分配空間 __new__方法做的事情
2)為對象的屬性設(shè)置初始值,也就是__init__方法做的事情。它是對象的內(nèi)置方法。創(chuàng)建對象時,會自動執(zhí)行初始化方法
即創(chuàng)建一個對象時,先執(zhí)行new創(chuàng)建內(nèi)存空間,然后執(zhí)行init方法,為申請的空間初始化
__del__對象在銷毀前,會被自動調(diào)用,如果想在銷毀前做一些事情,可以重寫此方法
__str__返回對象的描述信息,pirnt(對象)會打印對象的信息,如果想要自定義打印信息,可以重寫此方法,但返回值必須是str
二)
面向?qū)ο筇匦浴庋b
通過需求分析提取屬性和方法整合成一個類,即封裝
在對象的方法內(nèi)部,是可以直接訪問和使用對象的屬性的。
面向?qū)ο筇匦浴^承
繼承:不需要重寫重復(fù)的代碼
子類擁有父類的全部屬性和方法,但不能直接使用父類的私有屬性和方法
class 子類(父類):
繼承的傳遞性:子類可以繼承父類的父類的所有屬性和方法
面向?qū)ο筇匦浴鄳B(tài)
不同的子類對象調(diào)用相同得父類方法,產(chǎn)生不同的執(zhí)行結(jié)果,
可以增加代碼的靈活度,以繼承和方法的重寫為前提
三)特殊方法
1)類屬性,類方法
實例,實例化,實例屬性,實例方法
類是特殊的對象——類對象,在內(nèi)存中只有一份
類屬性定義——在類的下方使用賦值語句定義即可,訪問類屬性,使用類名.類屬性。
類屬性在內(nèi)存中只有一份;實例屬性在每個對象中都要保存一份。
類屬性存儲的內(nèi)容是大家共有的。---那就定義成類屬性。
類方法定義——-使用classmethod和cls來定義,
@classmethod? def 類方法(cls):? pass
訪問類方法,使用類名.類方法
2)靜態(tài)方法
定義:既不需要訪問類方法類屬性,實例方法,實例屬性時,可以定義此方法為靜態(tài)方法
格式:需要staticmethod,但不需要傳入self
@staticmethod ?def 靜態(tài)方法():? pass
訪問靜態(tài)方法: 類名.靜態(tài)方法()
3) 實例方法,類方法,靜態(tài)方法的選擇
實例方法:方法內(nèi)部訪問實例屬性,或者訪問類屬性時
類方法:方法內(nèi)部只訪問類屬性
靜態(tài)方法:不需要訪問類屬性和實例屬性。
class Foo(object): #類屬性 country = "China" #初始化方法 def __init__(self, name): #實例屬性 self.name = name #實例方法 def func(self): print(self.name) print("實例方法") #類方法 @classmethod def cls_func(cls): print("類方法") #靜態(tài)方法 @staticmethod def static_fun(): print("靜態(tài)方法") foo = Foo("shenzhen") print(Foo.country) #打印類屬性 print(foo.name) #打印實例屬性 foo.func() #調(diào)用實例方法 Foo.cls_func() #調(diào)用類方法 Foo.static_fun() #調(diào)用靜態(tài)方法
四)property屬性
定義property屬性有兩種方式,分別是裝飾器和類屬性, 裝飾器還分為經(jīng)典類和新式類。
1)經(jīng)典類--裝飾器方式定義:在實例方法的上面加上@property裝飾器,并且僅有一個self參數(shù),然后調(diào)用時,不需要加括號。
2)新式類--裝飾器方式定義:有三種訪問方式,@property,@方法名.setter, @方法名.deleter
3)類屬性方式定義:使用property方法,有四個參數(shù),具體看例子說明。
一般是property屬性內(nèi)部進(jìn)行一系列的邏輯計算,然后將計算結(jié)果返回。
目的是簡化調(diào)用者的流程
eg:
經(jīng)典類--裝飾器
class Person(object): def __init__(self, name): self.name = name @property def age(self): return 18 xiaoming = Person("xiaoming") print(xiaoming.age)
新式類--裝飾器
class Person1(object): def __init__(self, name): self.name = name @property def age(self): print("property") @age.setter def age(self, value): print("age.setter") @age.deleter def age(self): print("age.deleter") xiaoming1 = Person1("xiaoming1") xiaoming1.age xiaoming1.age = 200 del xiaoming1.age
執(zhí)行結(jié)果:
property
age.setter
age.deleter
類屬性方式定義
class Good(object): def __init__(self): self.price = 100 self.discount = 0.8 def get_price(self): new_price = self.price * self.discount return new_price def set_price(self, value): self.price = value def del_price(self): self.price PRICE = property(get_price, set_price, del_price, "價格描述") good = Good() good.PRICE good.PRICE = 200 del good.PRICE
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/43677.html
摘要:抽象數(shù)據(jù)類型的多個不同表示可以共存于同一個程序中,作為實現(xiàn)接口的不同類。封裝和信息隱藏信息隱藏將精心設(shè)計的模塊與不好的模塊區(qū)分開來的唯一最重要的因素是其隱藏內(nèi)部數(shù)據(jù)和其他模塊的其他實施細(xì)節(jié)的程度。 大綱 面向?qū)ο蟮臉?biāo)準(zhǔn)基本概念:對象,類,屬性,方法和接口OOP的獨特功能 封裝和信息隱藏 繼承和重寫 多態(tài)性,子類型和重載 靜態(tài)與動態(tài)分派 Java中一些重要的Object方法設(shè)計好的類面向...
摘要:二面向?qū)ο蟾攀雒嫦蜻^程的設(shè)計思想和面向?qū)ο蟮脑O(shè)計思想我要吃魚香肉絲蓋飯面向過程我買菜我洗菜我切菜我放水我點火我做飯我炒菜。。。。 大家好,上次我們講過了樂字節(jié)Java編程之方法、調(diào)用、重載、遞歸,接下來我們將會進(jìn)入到Java封裝的內(nèi)容。Java編程語言發(fā)展,面向?qū)ο蠛皖悺?一、編程語言的發(fā)展 機(jī)器語言——直接由計算機(jī)的指令組成,指令、數(shù)據(jù)、地址都以0和1組成:可以被計算機(jī)直接識別并執(zhí)行...
摘要:是一種典型的面向?qū)ο缶幊陶Z言。這篇文章主要是來初步理解一下面向?qū)ο蟮乃季S為下面的內(nèi)容先給一個基礎(chǔ)。針對面向?qū)ο缶幊痰母鄡?nèi)容,會在后面的文章里面詳細(xì)解釋。他們都稱之為對象。之后,我們再用編程語言,把這種映射編寫出來,就是的面向?qū)ο缶幊汤病? showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...
摘要:例如汽車這個名詞可以理解為汽車的總類,但這輛寶馬汽車則是一個具體的汽車對象。當(dāng)在類成員方法內(nèi)部調(diào)用的時候,可以使用偽變量調(diào)用當(dāng)前對象的屬性。在面向?qū)ο笾袆t被稱之為方法。 簡述 現(xiàn)在大伙都在講面向?qū)ο缶幊蹋俏覀円驳孟日抑粋€對象是不?不然怎么面向?qū)ο螅吭趺淳幊蹋?--- 笑話一則,但是理不虧,要搞P面向?qū)ο缶幊蹋覀兤鸫a要先搞懂對象(還有類)是什么?只有了解它,理解它,你才能駕馭它。...
抽象方法和類 抽象類是一個聲明為abstract的類 — 它可能包括也可能不包括抽象方法,抽象類無法實例化,但可以進(jìn)行子類化。 抽象方法是在沒有實現(xiàn)的情況下聲明的方法(沒有大括號,后跟分號),如下所示: abstract void moveTo(double deltaX, double deltaY); 如果一個類包含抽象方法,那么該類本身必須被聲明為abstract,如: public abs...
閱讀 2830·2021-11-24 09:39
閱讀 4082·2021-10-27 14:19
閱讀 2043·2021-08-12 13:25
閱讀 2334·2019-08-29 17:07
閱讀 1112·2019-08-29 13:44
閱讀 1066·2019-08-26 12:17
閱讀 462·2019-08-23 17:16
閱讀 2048·2019-08-23 16:46