'''''''''1.動態繫結:對於乙個類,我們可以對它的例項動態繫結新的屬性或方法。
為了使所有的例項均可以使用動態繫結的屬性和方法,我們也可以採用對類直接動態繫結
'''class student():
pass
s1=student()
s1.age=18 #對於例項動態繫結屬性
print(s1.age)
def set_age(self,age):
self.age=age
s2=student()
s2.set_age=set_age(s2,18) #對於例項動態繫結方法
print(s2.age)
student.set_age=set_age #對於類直接動態繫結乙個方法
s3=student()
s3.set_age(20)
print(s3.age)
'''2._slot_變數 :
限制例項可以動態繫結的屬性
對於父類的_slot_變數,對子類不起作用
'''class teacher():
__slots__ = ('name','age') #用元組的方式進行限制
t1=teacher()
t1.name="mr. wang"
t1.age="22"
# t1.salary="2000" #attributeerror: 'teacher' object has no attribute 'salary'
print(t1.name+":"+t1.age)
'''3.@property
裝飾器'''
class stu():
@property
def score(self):
return self._score
@score.setter
def score(self,value):
self._score=value
s4=stu()
s4.score=50
print(s4.score)
'''4.多重繼承:乙個子類可以同時繼承多個父類
結構: class 子類名(父類名1,父類名2,...)
5.__iter__:返回迭代物件
如果乙個類想被用於for ... in迴圈,類似list或tuple那樣,就必須實現乙個__iter__()方法,該方法返回乙個迭代物件,
然後,python的for迴圈就會不斷呼叫該迭代物件的__next__()方法拿到迴圈的下乙個值,直到遇到stopiteration錯誤時退出迴圈
見斐波那契數列
'''# class fib(object):
# def __init__(self):
# self.a, self.b = 0, 1 # 初始化兩個計數器a,b
## def __iter__(self):
# return self # 例項本身就是迭代物件,故返回自己
## def __next__(self):
# self.a, self.b = self.b, self.a + self.b # 計算下乙個值
# if self.a > 100000: # 退出迴圈的條件
# raise stopiteration()
# return self.a #返回下乙個值
# for n in fib():
# print(n)
'''要表現得像list那樣按照下標取出元素,需要實現__getitem__()方法:
'''class fib(object):
def __getitem__(self, n):
a, b = 1, 1
for x in range(n):
a, b = b, a + b
return a
f=fib()
print(f[2])
'''6.__str__():我們用這個方法可以將用print方法列印出來的東西按照我們的想法輸出
'''class student1(object):
def __init__(self, name):
self.name = name
def __str__(self):
return "name:"+self.name
...print(student1('tom'))
'''7.__repr__():
'''s=student1("alan")
'''不用print函式時,s本身的狀態就是<__main__.student object at 0x109afb310>,
這是因為直接顯示變數呼叫的不是__str__(),而是__repr__(),
兩者的區別是__str__()返回使用者看到的字串,而__repr__()返回程式開發者看到的字串,也就是說,__repr__()是為除錯服務的。
解決辦法是再定義乙個__repr__()。但是通常__str__()和__repr__()**都是一樣的,所以,有個偷懶的寫法:
'''class student2(object):
def __init__(self, name):
self.name = name
def __str__(self):
return 'student object (name=%s)' % self.name
__repr__ = __str__
'''8.列舉類:enum類
'''from enum import enum
month = enum('month', ('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'))
'''這樣我們就獲得了month型別的列舉類,可以直接使用month.jan來引用乙個常量,或者列舉它的所有成員:
'''for name, member in month.__members__.items():
print(name, '=>', member, ',', member.value)
'''value屬性則是自動賦給成員的int常量,預設從1開始計數。
'''
Python學習之物件導向
物件導向是一種設計思想 1 符合人們的思考習慣 2 把執行者變成指揮者 3 簡化功能,把複雜的事情簡單化 想完成一件事,找具有這樣功能的物件 如果能找到,呼叫這個物件的功能,完成這個事 如果找不到,建立具有這樣功能的物件,再呼叫完成這個事 類是對事物的描述,是抽象的。物件是類的具體體現。類對事物的描...
python之物件導向學習0
物件導向是相對於面向過程而言的,在早期程式設計中,比如實現1 2 3 6.通過設計乙個簡單的演算法就能實現。隨著計算機技術的不斷提高,計算機被用於解決越來越複雜的問題。一切事物皆物件,通過物件導向的方式,將現實世界的事物抽象成物件,現實世界中的關係抽象成類 繼承,幫助人們實現對現實世界的抽象與數字建...
Python學習之物件導向 一)
6.1.1 什麼是物件導向 面向過程式程式設計 好處 出色的完成所有的需求 壞處 凡是更改或者增加一條需求,可能整個專案都隨之改變 物件導向式程式設計 類 具有相似功能和特性的一類事物 物件 類的具體體現 類的優點 類是相似功能特徵的集合,可以讓 更清晰,更合理化 類是乙個公共的模板,物件是從這個模...