在類中屬性前加上雙下滑線就是私有化的屬性了,不能在類外直接通過類名呼叫
class
dog:
__role = 'dog'
d = dog
()print(dog.__role)
報錯!
我們可以用__dict__看看dog中有那些屬性看看__role變成了什麼
class
dog:
__role = 'dog'
print(dog.__dict__)
我們可以看到__role屬性變成了_dog__role
當我們用_dog__role呼叫看看
class
dog:
__role = 'dog'
print(dog._dog__role)
dog
我們可以看到role可以被呼叫了。所以在python中絕對的私有化是沒有的我們總能想到方法呼叫。
python中的私有化我感覺可以這麼理解當你的在變數名前新增了雙下劃線就等於把變數名改為了_當前類名__屬性名
裝飾器
可以將類中的方法偽裝成乙個屬性
用法如下
from math import pi
class
cricle:
def__init__
(self, r):
self.r = r
defperimeter
(self):
return
2 * pi * self.r
defsqare
(self):
return pi * self.r ** 2
在上述的**中我們定義了乙個圓類我們可以例項化乙個圓,每次我們想要得到其周長和面積是我們都可以呼叫他們的方法,但是我們可以這麼認為面積和周長是圓的固有屬性而不是方法,我們怎麼樣可以跟呼叫屬性一樣呼叫方法呢,python還是厲害.有個property的裝飾器可以用到
from math import pi
class
cricle:
def__init__
(self, r):
self.r = r
@property
defperimeter
(self):
return
2 * pi * self.r
@property
defsqare
(self):
return pi * self.r ** 2
現在我們可以直接跟呼叫屬性一樣呼叫方法了
c1 =cricle(5)
print(c1.perimeter)
輸出:31.41592653589793
class
goods:
__discount = 0.8
def__init__(self, name, price)
self.name = name
self.__price = price
@property
defprice(self):
return
self.__price * __discount
@price.setter
defprice(self, new_price):
self.__price = new_price
@price.deleter
defprice(self):
print('刪除了')
輸出結果:
4.06.4
刪除了!
nb!
class
goods:
__discount = 0.8
@classmethod
defmodify_discount
(cls, new_discount):
goods.__discount = new_discount
靜態方法和普通方法沒什麼大的區別
class
a:@staticmethod
deffunc
(args):
# 靜態方法
print('123')
a.func(args)
可以通過類名直接帶呼叫。 物件導向(二)
物件導向的特徵之三 多型 多型機制 是物件導向程式設計的乙個重要特徵 多型的特點 是採用同名的方式,根據呼叫方法時傳送的引數的多少以及傳送引數型別的不同,呼叫不同的方法,這樣對於類的編制而言,可以採用同樣的方法獲得不同的行為特徵 多型性可以分為 編譯時多型 和執行時多型 編譯時多型 表現為方法名相同...
物件導向 二
多型 polymorphic 概述 事物存在的多種形態.1,事物存在的多種形態.2,要有方法重寫 3,要有父類引用指向子類物件.3,要有父類引用指向子類物件.重寫的注意事項 b 子類重寫父類方法時,訪問許可權不能更低 重寫的例子 public class base void test byte b ...
物件導向(二)
1.構造方法與set 的區別 前者給屬性進行初始化,後者可以修改屬性值 開發常用,因為靈活 2.static關鍵字的特點 1 隨類的載入而載入 2 優先於物件而存在 3 被類的所有物件共享 如 乙個班的同學共享乙個班級 4 可以通過類名呼叫。3.靜態變數與成員變數的區別 4.塊 用 括起來的 1 區...