python學習20之物件導向程式設計高階

2022-08-17 05:27:25 字數 3222 閱讀 5775

''''''

'''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 什麼是物件導向 面向過程式程式設計 好處 出色的完成所有的需求 壞處 凡是更改或者增加一條需求,可能整個專案都隨之改變 物件導向式程式設計 類 具有相似功能和特性的一類事物 物件 類的具體體現 類的優點 類是相似功能特徵的集合,可以讓 更清晰,更合理化 類是乙個公共的模板,物件是從這個模...