Python入門學習筆記————15(類完結)
阿新 • • 發佈:2019-01-04
##變數的三種用法
class A ():
def __init__(self):
self._name = 'haha'
a = A()
#屬性的三種用法
#1.賦值
#2.讀取
#3.刪除
a.name = "狗蛋"
print(a.name)
del a.name
print(a.name)
狗蛋
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-6-8363ad424c07> in <module>() 12 print(a.name) 13 del a.name ---> 14 print(a.name) AttributeError: 'A' object has no attribute 'name'
In [10]:
#類屬性property
#應用場景:
##對變數除了普通的三種操作,還想增加一些附加的操作,那麼可以同過property完成
class A():
def __init__(self):
self.name = 'haha'
self.age = 18
#對變數進行讀取操作時應該執行的函式功能
def fget(self):
print('我被讀取了')
return self.name
#對變數進行寫操作時
def fset(self,n):
print('我被寫入了')
self.name = name + "hello"
#刪除操作
def fdel(self):
pass
#property三個引數的位置是固定的 先fget,然後fset,最後fdel
name2 = property(fget,fset,fdel,"哈哈哈哈哈哈")
a =A()
print(a.name)
print(a.name2)
haha 我被讀取了 haha
抽象類
- 抽象方法:沒有具體實現內容的方法稱為抽象方法
- 抽象方法的主要意義是規範了子類的行為和介面
- 抽象類的使用需要藉助abc模組
- import abc
- 抽象類:包涵抽象方法的類叫做抽象類,通常稱為ABC類
- 抽象類的使用
- 抽象類可以包含抽象方法,也可以包含具體的方法
- 抽象類中可以有方法也可以有屬性
- 抽象類不允許直接例項化
- 必須繼承才能使用,且繼承的子類必須實現所繼承來的抽象方法
- 假設子類沒有實現所有繼承的抽象方法,則子類也不能例項化
- 抽象的主要作用是設定類的標準,以便開發的時候具有統一規範
In [12]:
#抽象
class Animel():
def sayHello(self):
pass
class Dog(Animel):
print('聞一下對方')
class Person(Animel):
print('kiss')
d = Dog()
d.sayHello()
p = Person()
p.sayHello()
聞一下對方 kiss
In [16]:
#抽象類的實現
import abc
#宣告一個類並指定當前類的元類
class Human(metaclass=abc.ABCMeta):
#定義一個抽象方法
@abc.abstractmethod
def smoking(self):
pass
#定義類的抽象方法
@abc.abstractclassmethod
def drink():
pass
#定義靜態
@abc.abstractstaticmethod
def play():
pass
def sleep(self):
print('sleeping')
自定義類
- 類其實是一個類定義和各種方法的自由組合
- 可以定義類和函式,然後自己通過類直接賦值
- 可以藉助於MethodType實現
- 藉助於type實現
- 利用元類實現 MetaClass
- 元類是類,用來創造別的類
In [17]:
#函式名可以當變數使用
def sayHello(name):
print('{0}hello !'.format(name))
sayHello('yueyue')
people = sayHello
people('yueyue')
yueyuehello ! yueyuehello !
In [25]:
#自己組裝一個類
class A ():
pass
def say(self):
print('saying')
class B():
def say(self):
print('saying')
say(1)
A.say = say
a = A()
a.say()
b = B()
b.say()
saying saying saying
In [27]:
##自己組裝一個類 -2
from types import MethodType #
class A ():
pass
def say(self):
print('saying')
a = A()
a.say = MethodType(say,A) #通過MethodType方法將say與A繫結
a.say()
saying
In [29]:
#type
type(9)#返回了型別
Out[29]:
int
In [33]:
#利用type造一個類
#先定義類應該有的成員函式
def say(self):
print('saying')
def talk(self):
print('talking')
#用type創造一個類
A = type ('AName',(object,),{'class_say':say,'class_talk':talk})
#可以使用
a = A()
a.class_say()
a.class_talk()
saying talking
In [39]:
#元類演示
#元類寫法固定,必須繼承自type
#元類一般命名以MetaClass結尾
class WzhiMetaClass(type):
#注意以下寫法
def __new__(cls,name,bases,attrs):
print('我是元類')
attrs['id']='0000'
return type.__new__(cls,name,bases,attrs)
#元類定義完就可以使用
class Teacher(object,metaclass=WzhiMetaClass):
pass
t = Teacher()
t.id
我是元類
Out[39]:
'0000'