1. 程式人生 > >初識面向對象一

初識面向對象一

查看類 一次 尋找 __init__ 創建 rime 順序 記錄 是什麽

python中一切皆對象
# 類 : 具有相同屬性和方法的一類事務
# 描述一類事務輪廓的一個機制
# 商品/用戶/店鋪
# 對象/實例 :對象(實例)就是類的實例化
# 對象就是類的一個具體的表現
# 某一件特定的商品/某個人/某一家店
# 實例化 : 類 --> 對象
# 實例化的過程:
# 1.創建一個屬於對象的空間
# 2.執行__init__,把這個空間傳遞給init的第一個參數
# 3.把這個空間地址作為返回值返回給對象變量
# 如何定義一個類
# class Cls:pass
# 在類中直接可以定義的內容:
# 靜態屬性 : 這個類擁有的,所有的對象都共享的屬性
# 動態屬性 : 方法\定義在類中的函數,描述的是所有對象共享的行為
# 類名的作用:
# 實例化的時候 對象 = 類名()
# 操作靜態屬性
# 對象名的作用:
# 操作對象的屬性
# 調用方法
類中代碼的執行順序
# 一個類可不可以沒有__init__? 可以
# 在沒有__init__的情況下,實例化經歷了哪些步驟???
# 1.創建一個空間給對象
# 2.將這個空間的地址返回

# class A:
# Country = ‘China‘
# def __init__(self,name):
# self.name = name
# def talk(self):
# print(‘%s is talking‘%self.name)
# 類中的代碼是在什麽時候執行的? 在實例化之前
# 類的命名空間中有什麽:
# 靜態屬性
# 動態屬性(方法)

# 對象的命名空間和類的命名空間之間的關系 :
# 對象和類之間有一個單向的聯系,類對象指針
# 對象在使用某個名字的時候,如果在自己的空間中沒有找到,就要到類的空間中去找
# class A:
# Country = ‘China‘
# def __init__(self,name):
# self.name = name
# def talk(self):
# print(‘%s is talking‘%self.name)
#
# asd= A(‘asd‘) 在實例化的過程中,又開辟了屬於對象的一塊空間

# 對象可以查看類的靜態屬性,但是不能修改
# 並且一旦修改,就不能取到類當中的內容了(除非手動刪除這個修改的屬性)

# 所有的靜態屬性的修改,都應該由類名來完成,而不應該使用對象名來完成

# 寫一個類,能夠記錄這個類有多少個對象了(每一次實例化都能夠被記錄下來)
# class A:
# count = 0
# def __init__(self):
# A.count += 1
# print(A.count)
# a = A()
# print(A.count)
#
# class A:
# count = 0
# def __init__(self):
# self.counter()
# def counter(self):
# A.count+=1
# a = A()
# 如果靜態變量是一個不可變數據類型,那麽只要對象修改這個數據,就相當於在對象的空間中新建
# 如果靜態變量是一個可變數據類型,那麽對象修改這個容器中的元素,相當於修改類的空間中的元素
# 如果靜態變量是一個可變數據類型,那麽對象直接對這個變量重新賦值,相當於修改對象自己空間中的元素

# 大結論
# 只要是靜態變量,就用類名去修改,永遠修改成功,並且所有的對象都共享這個改變


# 總結
# 對象的命名空間:類指針\對象的所有屬性
# 類的命名空間:方法和(靜態屬性\字段)
# 對象在尋找名字的時候 : 先找對象自己內存空間中的,找不到就去類的命名空間中尋找
# 類中的名字是什麽時候寫入內存的 : 代碼從上到下執行的時候就已經寫入的.一定是在實例化之前
# 靜態變量 : 盡量用類名去操作

組合
計算圓跟環形的周長面積
from math import pi
class Circle:
def __init__(self,r):
self.r = r

def area(self):
return pi*self.r**2

def perimeter(self):
return 2*pi*self.r

class Ring:
def __init__(self,outer_r,inner_r):
c1 = Circle(outer_r)
c2 = Circle(inner_r)
self.out_c = c1 # c1.area() self.out_c.area()
self.in_c = c2 # c2.area() self.in_c.area()

def area(self):
return self.out_c.area() - self.in_c.area()

def perimeter(self):
return self.out_c.perimeter() + self.in_c.perimeter()

r1 = Ring(10,5)
print(r1.area())
print(r1.perimeter())


 


 

初識面向對象一