物件導向程式設計(oop),是一種程式設計方式,這種程式設計方式需要使用「物件」來實現
物件的特徵
1、世間萬物皆物件
2、每個物件都是唯一的
3、物件具有屬性和行為,物件的行為包括具有的功能和具體的實現。行為(方法)是類中特殊的函式
4、物件具有狀態,狀態是指某個瞬間物件的各個屬性的取值,物件的某些行為會改變物件自身的狀態
5、物件分為類物件和例項物件兩大類
類物件是具有相同屬性和行為的例項物件的抽象
類物件就是例項物件的模板,例項物件是由類物件建立出來的
同乙個類物件的所有例項物件如果具有相同的屬性,表明他們的屬性的含義是相同的
物件導向程式設計的大體步驟:
1、抽象出類物件
2、抽象出類物件的屬性
3、抽象出類物件的行為(方法)
4、根據類物件建立例項物件
5、通過例項物件訪問屬性和方法
(駝峰規則:每個單詞首字母大寫)
class cat(object):括號裡寫繼承的父類,不明確是就寫object:python內建的類物件,也叫基類
# pass
# 初始化屬性
def __init__(self,breed,name,age,health):#雙下劃線表示構造方法,self指例項化後的物件,這裡即自己,必須寫
self.breed = breed
self.name = name
self.age = age
self.health = health
# 行為,第乙個引數都是self
def run(self):
print("cat is running.")
def miao(self):
print("cat is miaoing.")
def eat(self):
print("cat is eatting.")
類的方法與函式的區別
1、定義方法時,方法的第乙個形參表示呼叫該方法的例項物件,第乙個形參的名稱通常是self,也可以是其他名稱
2、呼叫該方法時,系統自動將呼叫該方法的例項物件作為實參傳遞給第乙個形參。第乙個實參會傳遞給第二個形參,第二個形參會傳遞給第三個形參,依此類推
#根據類物件建立例項物件
cat = cat("波斯貓",'喵喵',1,'很好')
print(cat.breed)
print(cat.name)
print(cat.age)
print(cat.health)
cat.run()
cat.miao()
cat.eat()
例項屬性指的是例項物件所繫結的屬性
1、在類物件內部:
self.屬性名 = 屬性值
推薦在__init__中進行繫結,這樣,在建立例項物件後就會自動呼叫特殊方法__init__對例項物件進行初始化,從而繫結例項屬性,其他方法中繫結的話,可能需要手動呼叫方法後才繫結
2、外部
例項物件.屬性名 = 屬性值
如果指定名稱的例項屬性已經存在,則是對例項屬性進行修改
訪問例項屬性:
1、方法中:self.屬性名
2、類物件外部:是例項物件.屬性名
class myclass(object):
def __init__(self):
#方法中繫結例項屬性
self.ia1 = 18
def do_sth1(self):
#方法中
print(self.ia1)
def do_sth2(self):
print(self.ia2)
def do_another(self):
self.ia2 = 56
def do_sth3(self):
print(self.ia3)
mc = myclass()
mc.do_sth1()
mc.do_sth2()#屬性值沒有被賦值
mc.do_another()
mc.do_sth2()
print(mc.ia2)
mc.do_sth3()
mc.ia3 = 66
print(mc.ia3)
mc2 = myclass()
print(mc2.ia3)
mc.__dict__
dir(mc)
繫結類屬性(給類物件繫結屬性)
1、類物件內部(方法外):屬性名 = 屬性值
2、類物件外部:類物件.屬性名= 屬性值
如果指定名稱的類屬性已經存在,則是對類屬性進行修改
例項方法指的是只有例項物件才能呼叫的方法
class person(object):
age = 18 #(類屬性)
def __init__(self):
#方法中繫結例項屬性
self.age = 19#(例項屬性)
class person(object):
age = 18
p = person()
p.age = 19
print(p.age)#19
print(person.age)#18
p1 = person()
p2 = person()
p1.age += 2
print(person.age)
print(p1.age)
print(p2.age)
person.age += 3
print(person.age)
print(p1.age)
print(p2.age)
不改變函式**,增加額外的功能
裝飾器接受乙個函式作為引數(傳入的實參是被修飾的函式)
把裝飾器應用到被裝飾函式的語法為:在被裝飾函式的前面新增 @裝飾器的函式名
def notice(func):
print('公告')
return func(*args,**kwargs)
@notice
def add(a,b):
return a+b
print(add(3,5))
#等價於 add=notice(add)
class myclass(object):
# 在類物件中定義類方法
@classmethod
def class_func(cls,a,b):
print(a,b)
myclass.class_func('hi','everyone')
mc = myclass()
mc.class_func(1,2)
class myclass(object):
#在類物件內部呼叫類方法
def class_func_1(cls,a,b):
print(a,b)
@classmethod
def class_func_2(cls,a,b):
myclass.class_func_1(1,2)
cls.class_func_1(1,2)
#通過例項物件呼叫類方法
def ins_func(self):
self.class_func_1(1,2)
mc = myclass()
mc.class_func_2(1,2)
物件導向 02
私有屬性 私有方法 偽私有屬性和方法 私有屬性 物件不希望公開的屬性,語法是在屬性前面加上 屬性名 私有方法 物件不希望公開的方法,語法是在方法前面加上 方法名 偽私有屬性和方法是指在python中並沒有真正意義上的私有,而是把屬性或者方法名前面加上了 類名,可以通過 類名 屬性名的形式訪問,但是不...
物件導向02
當我們談到類和物件的時候,我們在做的基本的事情就是 定義乙個抽象資料型別 類是什麼?物件的例項的模板 我們先談談面向的物件的特性 class person object def init self,name,rrror self.name name self.error rrror def pr s...
Java物件導向02
3.1 string類 重點 3.1.1 string類兩種物件例項化方式 對於string在之前已經學習過了基本使用,就是表示字串,那麼當時使用的形式採用了直接賦值 public class stringdemo return true 以上的這些操作只是給了乙個基本的思路,實際上不可能如此完成的...