Python-类基础
生活随笔
收集整理的這篇文章主要介紹了
Python-类基础
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
# 接口類(抽象類)
from abc import ABCMeta,abstractmethod
# 接口類,用于規(guī)定:繼承此類的派生類,必須有什么方法
class PayMeta(metaclass=ABCMeta):# 加上裝飾器@abstractmethod,代表繼承PayMeta類的派生類中必須有pay方法,否者報(bào)錯。
@abstractmethoddef pay(self): passclass Alipay(PayMeta):def __init__(self,money):self.money = moneydef pay1(self):print('使用支付寶,支付了<%s>.'%self.money)def pay(self):print('使用支付寶,支付了<%s>.'%self.money)
def pay(obj):obj.pay()
a1 = Alipay(500)
pay(a1) 接口類 # 類的私有字段、方法
# 在字段名前加上__該字段就成為了私有字段,只能在類的內(nèi)部訪問。就算是派生類(子類)也無法訪問
'''
私有字段的實(shí)現(xiàn)原理,在Python解釋器讀到__開頭的字段時(shí),會給該字段改名,改為 ‘_類名__字段名’,所以使用_類名__字段名 這個可以在任何地方訪問私有字段,但是不推薦這樣訪問私有方法也是同理注:在Python解釋器從上到下讀取類代碼的時(shí)候,只要遇到私有字段都會將名字改為‘_類名__字段名’,不管是調(diào)用還是定義'''class A:__name = '類的私有字段'def __f1(self):print('__f1')def f2(self):self.__f1()
class B(A):def fun(self):print(self._A__name)b1 = B()
b1.fun()
a1 = A()
a1.f2()# 類的私有方法
class Parent():def __func(self):print('in Parent func Parent的私有方法')def __init__(self):self.__func()class Son(Parent):def __fun(self):print('in Son func Son的私有方法')son1 = Son()# 類的私有對象屬性
class A:__fun = 0def __init__(self,age):self.__arg = '類的私有靜態(tài)對象屬性'self.__age = agedef func(self):print(self.__arg)print(self.__age)
# def __fun(self):
# print(666)
a1 = A(12)
print(A.__dict__)
a1.func() 類的私有方法、字段 # 創(chuàng)建一個類,計(jì)算BMI指數(shù)
'''
@property裝飾器
property 可以讓一個方法,偽裝成屬性使用。下面是示例'''
class Bmi:def __init__(self,weight,hight,name):self.weight = weightself.hight = hightself.name = name@propertydef bmi(self):b = self.weight / self.hight ** 2if b < 18.5:return '《Name:%s BMI:%s》過輕:低于:18.5'%(self.name,format(b,'0.2f'))elif b <= 23.9:return '《Name:%s BMI:%s》正常:18.5~23.9之間'%(self.name,format(b,'0.2f'))elif b <= 27:return '《Name:%s BMI:%s》過重:24~27之間'%(self.name,format(b,'0.2f'))elif b <= 32:return '《Name:%s BMI:%s》肥胖:28~32之間'%(self.name,format(b,'0.2f'))else:return '《Name:%s BMI:%s》非常肥胖:高于32'%(self.name,format(b,'0.2f'))bmi = Bmi(73,1.77,'kkk')
print(bmi.bmi) @property屬性 # property 屬性的修改
'''
@property裝飾器
property 可以讓一個方法 偽裝成屬性使用。偽裝屬性的修改
@需要修改的屬性.setter 下面是示例注: 要使用 setter 裝飾器 必須要存在@property
'''
class A:def __init__(self,name,age):self.__name = nameself.__age = age# 查看屬性
@property def age(self):return self.__age# 修改屬性
@age.setter def age(self,a1): self.__age = a1 if isinstance(a1,int) else self.__age# 刪除屬性
@age.deleterdef age(self):del self.__agea1 = A('kkk',28)
print(a1.age)
a1.age = a1.age + 1
print(a1.age)
del a1.age property 屬性的修改(setter、deleter) # 類方法class A:def func(self):print(self)@classmethod def func1(cls):# cls 就是 A 這個類print('傳入的cls',cls)return cls()a1 = A.func1()
a1.func()
# 對象調(diào)用類方法,自動傳入的cls也是類本身。
a2 = A()
a2.func1()
'''
類方法的使用場景1.類中 有些方法不需要對象參與
2.對類中的靜態(tài)變量進(jìn)行改變,要用類方法
3.在父類中獲取,子類類空間'''
# 在父類中獲取,子類類空間
class A:@classmethoddef func(cls):print(cls)
class B(A):pass
B.func() 類方法 classmethod # 靜態(tài)方法
'''
靜態(tài)方法:沒有self,cls 不用默認(rèn)傳入 對象和類
'''
class A:@staticmethoddef func():print(666)
A.func() 類的靜態(tài)方法
?
轉(zhuǎn)載于:https://www.cnblogs.com/wtil/p/10960727.html
總結(jié)
以上是生活随笔為你收集整理的Python-类基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx版本策略
- 下一篇: Python module模块 包