面向對象筆記

個人整理

面向對象:
1、定義:一種認識世界、分析世界的方法論。將萬事萬物抽象為類。
2、類class:類是抽象的概念,是一類事物的共同特征的集合。計算機語言指的就是屬性和方法。
3、對象instance、object:對象是類的具象,是一個實體

python中,一個對象的特征也稱為屬性,它所具有的行為叫方法。
具有相同屬性和方法的對象歸為一個類。
類是對象的抽象化,對象是類的實例化,對象表示具體事物。

 

面向對象:對函數進行分類和封裝。
面向過程:根據業務邏輯從上到下寫壘代碼
函數式:將某功能的代碼封裝到函數中,以后使用調用函數

類可以理解為一個模板,里面可以包含多個函數,函數里實現一些功能
對象是根據模板創建的實例,通過實例對象可以執行類中的函數。

class MyClass:
x = 123
class:關鍵字,表示要創建類
MyClass:類名稱

def foo(self): self:特殊參數,必填
return ‘My Class’
print(MyClass.x)
print(MyClass.foo)
print(MyClass.__doc__)

對象是數據和操作的封裝。

封裝:
組裝:將數據和操作組裝到一起。
隱藏數據:對外暴露接口,通過接口訪問對象。

繼承:
多復用
多繼承少修改

多態

類對象,類的定義會產生一個類對象
類屬性:定義中的變量和定義的方法都是類的屬性,也叫方法
類變量:x是類定義的一個變量

MyClass中,x、foo都是類的屬性,__doc__也是類的屬性
foo方法是類的屬性

foo是method方法對象,不是普通的函數對象function了,它必須至少有一個參數,且第一個必須是self
self指代當前實例本身。

 

實例化
a = MyClass() #實例化,在類對象名稱后面加上一個括號,即是調用類的實例化方法,完成實例化。
實例化就是真正創建一個該類的對象(實例)

實例化后獲得的實例,是不同的實例,即使使用相同的參數實例化,也得到不一樣的參數。
python類實例化后,會自動調用__init__方法,這個方法第一個參數必須留給self,其它隨意。

 

MyClass()實際上調用的是__init__(self)方法,可以不定義,如果沒有定義會在實例化后隱式調用

class MyClass:
def __init__(self):
print(‘init’)

a = MyClass() #會調用__init__

 

類屬性:類對象所擁有的屬性,它被所有類對象的實例對象所共有,在內存中只存一個副本
# 類屬性
class people:
name=”Tom” #公有的類屬性
__age=18 #私有的類屬性

p=people() #實例化
print(p.name) #實例對象
print(people.name) #類對象

# print(p.__age) #錯誤 不能在類外通過實例對象訪問私有的類屬性
print(people.__age) #錯誤 不能在類外同過類對象訪問私有的類屬性

 

實例屬性:
class people:
name=”tom”

p=people()
p.age=18

print(p.name)
print(p.age) #實例屬性是實例對象特有的,類對象不能擁有

print(people.name)
#print(people.age) #錯誤:實例屬性,不能通過類對象調用

也可以將實例屬性放在構造方法中

class people:
name=”tom”
def __init__(self,age):
self.age=age

p=people(18)

print(p.name)
print(p.age) #實例屬性是實例對象特有的,類對象不能擁有

print(people.name)
# print(people.age) #錯誤:實例屬性,不能通過類對象調用

 

如果在類外修改類屬性,必須通過類對象去引用然后進行修改。如果通過實例對象去引用,
# 會產生一個同名的實例屬性,這種方式修改的是實例屬性,不會影響到類屬性,并且如果通過
# 實例對象引用該名稱的屬性,實例屬性會強制屏蔽掉類屬性,即引用的是實例屬性,除非刪除了該實例屬性

class Animal:
name=”Panda”

print(Animal.name) #類對象引用類屬性
p=Animal()
print(p.name) #實例對象引用類屬性時,會產生一個同名的實例屬性
p.name=”dog” #修改的只是實例屬性的,不會影響到類屬性
print(p.name) #dog
print(Animal.name) #panda

# 刪除實例屬性
del p.name
print(p.name)

 

class Test:

num=100 #類屬性
def __init__(self):
self.age=18 #實例屬性

test1=Test()
test2=Test()
# test1.age=19
# test2.age=20
print(test1.num) #100
test1.num=200 #如果通過對象去修改類屬性,那么Python會自動給這個對象和這個類屬性相同名字的實例屬性
print(test1.num) #200,只是修改了副本
print(Test.num) #100

del test1.num #刪除之后,仍能打印
print(test1.num)

 

3、類方法

是類對象所擁有的方法,需要用修飾器@classmethod來標識其為類方法,對于類方法,第一個參數必須是類對象,一般以cls作為第一個參數(當然可以用其他名稱的變量作為其第一個參數,但是大部分人都習慣以’cls’作為第一個參數的名字,就最好用’cls’了),能夠通過實例對象和類對象去訪問。

class people:
country=”china”

@classmethod
def getCountry(cls):
return cls.country

p=people()
print(p.getCountry()) #實例對象調用類方法
print(people.getCountry()) #類對象調用類方法

 

類方法還有一個用途就是可以對類屬性進行修改:
class people:
country=”china”

@classmethod
def getCountry(cls):
return cls.country
@classmethod
def setCountry(cls,country):
cls.country=country

p=people()
print(p.getCountry()) #實例對象調用類方法
print(people.getCountry()) #類對象調用類方法

p.setCountry(“Japan”)

print(p.getCountry())
print(people.getCountry())

 

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88328

(0)
泰谷子泰谷子
上一篇 2017-11-12
下一篇 2017-11-12

相關推薦

欧美性久久久久