摘要:目的是簡化調用者的流程經典類裝飾器新式類裝飾器執行結果類屬性方式定義價格描述
面向對象
類和對象:類是模版,對象是類創建出來的一個具體的存在
類的三要素:類名(單詞首字母必須大寫,單詞間無下劃線),屬性,方法
使用名詞提煉法來設計一個類
一)類的基礎
dir(對象) 查看該對象的所有方法和屬性
創建對象:類名()
初始化方法:
當使用類名創建對象時,會自動執行如下操作
1)為對象在內存中分配空間 __new__方法做的事情
2)為對象的屬性設置初始值,也就是__init__方法做的事情。它是對象的內置方法。創建對象時,會自動執行初始化方法
即創建一個對象時,先執行new創建內存空間,然后執行init方法,為申請的空間初始化
__del__對象在銷毀前,會被自動調用,如果想在銷毀前做一些事情,可以重寫此方法
__str__返回對象的描述信息,pirnt(對象)會打印對象的信息,如果想要自定義打印信息,可以重寫此方法,但返回值必須是str
二)
面向對象特性———封裝
通過需求分析提取屬性和方法整合成一個類,即封裝
在對象的方法內部,是可以直接訪問和使用對象的屬性的。
面向對象特性———繼承
繼承:不需要重寫重復的代碼
子類擁有父類的全部屬性和方法,但不能直接使用父類的私有屬性和方法
class 子類(父類):
繼承的傳遞性:子類可以繼承父類的父類的所有屬性和方法
面向對象特性——多態
不同的子類對象調用相同得父類方法,產生不同的執行結果,
可以增加代碼的靈活度,以繼承和方法的重寫為前提
三)特殊方法
1)類屬性,類方法
實例,實例化,實例屬性,實例方法
類是特殊的對象——類對象,在內存中只有一份
類屬性定義——在類的下方使用賦值語句定義即可,訪問類屬性,使用類名.類屬性。
類屬性在內存中只有一份;實例屬性在每個對象中都要保存一份。
類屬性存儲的內容是大家共有的。---那就定義成類屬性。
類方法定義——-使用classmethod和cls來定義,
@classmethod? def 類方法(cls):? pass
訪問類方法,使用類名.類方法
2)靜態方法
定義:既不需要訪問類方法類屬性,實例方法,實例屬性時,可以定義此方法為靜態方法
格式:需要staticmethod,但不需要傳入self
@staticmethod ?def 靜態方法():? pass
訪問靜態方法: 類名.靜態方法()
3) 實例方法,類方法,靜態方法的選擇
實例方法:方法內部訪問實例屬性,或者訪問類屬性時
類方法:方法內部只訪問類屬性
靜態方法:不需要訪問類屬性和實例屬性。
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("類方法") #靜態方法 @staticmethod def static_fun(): print("靜態方法") foo = Foo("shenzhen") print(Foo.country) #打印類屬性 print(foo.name) #打印實例屬性 foo.func() #調用實例方法 Foo.cls_func() #調用類方法 Foo.static_fun() #調用靜態方法
四)property屬性
定義property屬性有兩種方式,分別是裝飾器和類屬性, 裝飾器還分為經典類和新式類。
1)經典類--裝飾器方式定義:在實例方法的上面加上@property裝飾器,并且僅有一個self參數,然后調用時,不需要加括號。
2)新式類--裝飾器方式定義:有三種訪問方式,@property,@方法名.setter, @方法名.deleter
3)類屬性方式定義:使用property方法,有四個參數,具體看例子說明。
一般是property屬性內部進行一系列的邏輯計算,然后將計算結果返回。
目的是簡化調用者的流程
eg:
經典類--裝飾器
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
執行結果:
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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43677.html
摘要:抽象數據類型的多個不同表示可以共存于同一個程序中,作為實現接口的不同類。封裝和信息隱藏信息隱藏將精心設計的模塊與不好的模塊區分開來的唯一最重要的因素是其隱藏內部數據和其他模塊的其他實施細節的程度。 大綱 面向對象的標準基本概念:對象,類,屬性,方法和接口OOP的獨特功能 封裝和信息隱藏 繼承和重寫 多態性,子類型和重載 靜態與動態分派 Java中一些重要的Object方法設計好的類面向...
摘要:二面向對象概述面向過程的設計思想和面向對象的設計思想我要吃魚香肉絲蓋飯面向過程我買菜我洗菜我切菜我放水我點火我做飯我炒菜。。。。 大家好,上次我們講過了樂字節Java編程之方法、調用、重載、遞歸,接下來我們將會進入到Java封裝的內容。Java編程語言發展,面向對象和類。 一、編程語言的發展 機器語言——直接由計算機的指令組成,指令、數據、地址都以0和1組成:可以被計算機直接識別并執行...
摘要:是一種典型的面向對象編程語言。這篇文章主要是來初步理解一下面向對象的思維為下面的內容先給一個基礎。針對面向對象編程的更多內容,會在后面的文章里面詳細解釋。他們都稱之為對象。之后,我們再用編程語言,把這種映射編寫出來,就是的面向對象編程啦。 showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...
摘要:例如汽車這個名詞可以理解為汽車的總類,但這輛寶馬汽車則是一個具體的汽車對象。當在類成員方法內部調用的時候,可以使用偽變量調用當前對象的屬性。在面向對象中則被稱之為方法。 簡述 現在大伙都在講面向對象編程,但是我們也得先找著一個對象是不?不然怎么面向對象?怎么編程? --- 笑話一則,但是理不虧,要搞P面向對象編程,我們起碼要先搞懂對象(還有類)是什么?只有了解它,理解它,你才能駕馭它。...
抽象方法和類 抽象類是一個聲明為abstract的類 — 它可能包括也可能不包括抽象方法,抽象類無法實例化,但可以進行子類化。 抽象方法是在沒有實現的情況下聲明的方法(沒有大括號,后跟分號),如下所示: abstract void moveTo(double deltaX, double deltaY); 如果一個類包含抽象方法,那么該類本身必須被聲明為abstract,如: public abs...
閱讀 2836·2021-11-24 09:39
閱讀 4119·2021-10-27 14:19
閱讀 2055·2021-08-12 13:25
閱讀 2343·2019-08-29 17:07
閱讀 1121·2019-08-29 13:44
閱讀 1073·2019-08-26 12:17
閱讀 469·2019-08-23 17:16
閱讀 2055·2019-08-23 16:46