Python 學習筆記(五)[面向物件]
阿新 • • 發佈:2018-11-27
變數
類的變數
class A:
num = 1
a = A()
# 1
a.num
# 1
A.num
# 修改類的變數值
A.num = 2
# 2
a.num
# 修改物件的變數值
a.num = 3
2
A.num
# 給物件新增屬性
a.age = 10
# 沒有
A.age
例項的變數
class A:
def __init__(self):
self.num = 1
a = A()
# 沒有
A.num
# 1
a.num
函式
類的函式
class A: num = 1 def func(): print(num) a = A() # 報錯,因為會自動把 a 作為引數,與函式引數不匹配 a.func() # 報錯,在 func() 中找不到 num A.func()
class A:
num = 1
@classmethod
def func(cls):
print(cls.num)
a = A()
# 1
a.func()
# 1
A.func()
class A:
num = 1
@staticmethod
def func():
print(num)
# 報錯,在 func() 中找不到 num
A.func()
class A: num = 1 @staticmethod def func(): a = 2 print(a) a = A() b = A() # 2 a.func() # 2 b.func()
引數 | 訪問類變數 | 訪問例項變數 | |
---|---|---|---|
@classmethod | cls | 可以 | 不可以 |
@staticmethod | 不需要 | 不可以 | 不可以 |
例項的函式
class A:
def func(self,x,y):
return x + y;
a = A()
# 30
a.func(10,20)
# 沒有
A.func(10,20)
繼承
class A: @classmethod def func(cls): print('A') class A1(A): pass # A A1.func() # (<class 'object'>,) print(A.__bases__) # (<class '__main__.A'>,) print(A1.__bases__) class A: def __init__(self): self.num = 1 print(self.num) class A1(A): pass # 1 a = A1() class A: def __init__(self): self.num = 1 print(self.num) class A1(A): def __init__(self): self.num = 2 print(self.num) def myfunc(): print('this is my func') # 2 a = A1()
多繼承
class A:
def __init__(self):
print('A')
class B:
def __init__(self):
print('B')
class C(A,B):
pass
# A
a = C()
多型
- 目的:根據資料的型別執行不同的操作
- 實現:子類重寫父類的方法
class A:
def func(self):
print('A')
class B(A):
def func(self):
print('B')
a = A()
b = B()
# A
a.func()
# B
b.func()
# True
isinstance(a,A)
isinstance(b,B)
isinstance(b,A)
# False
isinstance(a,B)
# 多型
def myfunc(obj):
obj.func()
# A
myfunc(a)
# B
myfunc(b)
內建函式
class A:
def __call__(self):
print('A')
a = A()
# A
a()
class A:
# 建構函式(分配空間)
def __new__(self):
print('new')
return super(A,self).__new__(self)
# 資料初始化
def __init__(self):
print('init')
# 銷燬前(清理工作)
def __del__(self):
print('del')
# new
# init
a = A()
# del
del a
- 限制屬性
class A:
__slots__ = ('name','age')
a = A()
a.name = 'abc'
a.age = 10
# 報錯,屬性範圍中沒有 school
a.schoole = 'haha'