-
這是一段Python代碼,它定義了幾個類和它們的方法。以下是對每個類和函數(shù)的詳細解釋:
person類:這是一個基礎類,用于表示一個人。它有一個初始化方法__init__,該方法接受一個參數(shù)name,并將其賦值給類的name屬性。
python
復制
class person():
? ? def __init__(self, name):
? ? ? ? self.name = name
skillMixin類:這是一個混合類(Mixin),用于添加技能相關的功能。它也有一個初始化方法__init__,接受一個參數(shù)skil,并將其賦值給類的skill屬性。
python
復制
class skillMixin():
? ? def __init__(self, skil):
? ? ? ? self.skill = skil
basketballMixin類:這是一個繼承自skillMixin的類,專門用于表示籃球技能。它重寫了父類的skill方法,打印出字符串'basketball'。
python
復制
class basketballMixin(skillMixin):
? ? def skill(self):
? ? ? ? print('basketball')
student類:這是一個繼承自person的類,用于表示學生。它重寫了父類的初始化方法__init__,以確保調用父類的初始化方法。
python
復制
class student(person):
? ? def __init__(self, name):
? ? ? ? super(student, self).__init__(name)
Bstudent類:這是一個同時繼承自basketballMixin和student的類,用于表示會打籃球的學生。它沒有定義額外的方法或屬性,因此它繼承了其父類的所有功能。
python
復制
class Bstudent(basketballMixin, student):
? ? pass
在代碼的末尾,注釋掉的部分創(chuàng)建了一個Bstudent類的實例s,并嘗試調用它的skil()方法(應該是skill()方法)。如果取消注釋,這段代碼會創(chuàng)建一個學生實例,并打印出'basketball',因為Bstudent類繼承了basketballMixin類的skill方法。
總結來說,這段代碼展示了Python中類和混合類的定義,以及如何通過繼承來組合不同的類和功能。
查看全部 -
代碼定義了一個名為Person的類,它使用__slots__屬性來限制可以動態(tài)添加的實例屬性。在這個例子中,Person類只有兩個屬性:name和gender。__init__方法是構造方法,用于初始化這些屬性。
接著,代碼定義了一個名為Student的類,它繼承自Person類。Student類同樣使用__slots__來限制實例屬性,這里添加了一個額外的屬性score。Student類的__init__方法不僅初始化了從Person類繼承來的name和gender屬性,還初始化了score屬性。
在代碼的最后,創(chuàng)建了一個Student類的實例s,并給它的name屬性賦值為'Tim',score屬性賦值為99。然后,通過s.score打印出實例s的score屬性值。
這是一個面向對象編程的例子,展示了類的繼承和實例化,以及如何通過實例來訪問類中定義的屬性。
查看全部 -
int()函數(shù)可以把字符串轉換為整數(shù),當僅傳入字符串時,int()函數(shù)默認按十進制轉換;int()函數(shù)還提供額外的base參數(shù),如果傳入base參數(shù),就可以做 N 進制的轉換。
>>>?int('12345',?base=8) 5349
functools.partial就是幫助我們創(chuàng)建一個偏函數(shù)的,不需要我們自己定義int2(),可以直接使用下面的代碼創(chuàng)建一個新的函數(shù)int2:
>>>?import?functools >>>?int2?=?functools.partial(int,?base=2) >>>?int2('1000000') 64
查看全部 -
@log('DEBUG') def?my_func(): ????pass
my_func?=?log('DEBUG')(my_func)
log_decorator?=?log('DEBUG') my_func?=?log_decorator(my_func)
log_decorator?=?log('DEBUG') @log_decorator def?my_func(): ????pass
帶參數(shù)的log函數(shù)首先返回一個decorator函數(shù),再讓這個decorator函數(shù)接收my_func并返回新函數(shù),相當于是在原有的二層嵌套里面,增加了一層嵌套.
def?log(prefix): ????def?log_decorator(f): ????????def?wrapper(*args,?**kw): ????????????print('[{}]?{}()...'.format(prefix,?f.__name__)) ????????????return?f(*args,?**kw) ????????return?wrapper ????return?log_decorator @log('DEBUG') def?test(): ????pass test()
查看全部 -
Python的 decorator 本質上就是一個高階函數(shù),它接收一個函數(shù)作為參數(shù),然后,返回一個新函數(shù)。
使用 decorator 用Python提供的 @ 語法,這樣可以避免手動編寫 f = decorate(f) 這樣的代碼。
要讓 @log 自適應任何參數(shù)定義的函數(shù),可以利用Python的?args 和 *kwargs,保證任意個數(shù)的參數(shù)總是能正常調用.
def?log(f): ????def?fn(*args,?**kwargs): ????????print('call?'?+?f.__name__?+?'()...') ????????return?f(*args,?**kwargs) ????return?fn
@log def?factorial(n): ????return?reduce(lambda?x,y:?x*y,?range(1,?n+1)) print(factorial(10))
查看全部 -
內層函數(shù)引用了外層函數(shù)的變量(參數(shù)也算變量),然后返回內層函數(shù)的情況,稱為閉包(Closure)。
閉包的特點是返回的函數(shù)還引用了外層函數(shù)的局部變量,所以,要正確使用閉包,就要確保引用的局部變量在函數(shù)返回后不能變。
def?calc_sum(list_): ????def?lazy_sum(): ????????return?sum(list_) ????return?lazy_sum
查看全部 -
返回函數(shù)和返回函數(shù)值的語句是非常類似的,返回函數(shù)時,不能帶小括號,而返回函數(shù)值時,則需要帶上小括號以調用函數(shù)。
#?返回函數(shù) def?myabs(): ????return?abs #?返回函數(shù)值 def?myabs(x): ????return?abs(x)
查看全部 -
需要指定排序的字段是成績,sorted接受key參數(shù),用來指定排序的字段,key的值是一個函數(shù),接受待排序列表的元素作為參數(shù),并返回對應需要排序的字段。
def?k(item): ????return?item[1]?#?==>?按成績排序,成績是第二個字段 sorted(score,?key=k)
查看全部 -
filter()函數(shù)是 Python 內置的另一個有用的高階函數(shù),filter()函數(shù)接收一個函數(shù) f 和一個list,這個函數(shù) f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據(jù)判斷結果自動過濾掉不符合條件的元素,并返回一個迭代器,可以迭代出所有符合條件的元素。
def?is_odd(x): ????return?x?%?2?==?1 for?item?in?filter(is_odd,?[1,?4,?6,?7,?9,?12,?17]): ????print(item)
查看全部 -
reduce()函數(shù)接收的參數(shù)和 map() 類似,一個函數(shù) f,一個list,但行為和 map()不同,reduce()傳入的函數(shù) f 必須接收兩個參數(shù),reduce()對list的每個元素反復調用函數(shù)f,并返回最終結果值。
查看全部 -
俺嫂子在[]
-——嘖-啊嘖(--“”。在。![]查看全部 -
map()是 Python 內置的高階函數(shù),它接收一個函數(shù) f?和一個 list,并通過把函數(shù) f依次作用在list的每個元素上,map()函數(shù)會返回一個迭代器,可以依次迭代得到原來list的元素被函數(shù)f處理后的結果。
map(f,?list)
查看全部 -
在Python中,使用套接字socket來建立起網(wǎng)絡連接。
服務端建立需要四個步驟:新建socket、綁定IP和端口(bind)、監(jiān)聽連接(listen)、接受連接(accept)。
客戶端僅需兩個步驟:新建socket、連接服務端(connect)。
當網(wǎng)絡連接上以后,客戶端和服務端就可以進行數(shù)據(jù)通信了,套接字通過send()函數(shù)發(fā)送數(shù)據(jù),通過recv()函數(shù)接收數(shù)據(jù)。
import?socket server?=?socket.socket()?#?1.?新建socket server.bind(('127.0.0.1',?8999))?#?2.?綁定IP和端口(其中127.0.0.1為本機回環(huán)IP) server.listen(5)?#?3.?監(jiān)聽連接 s,?addr?=?server.accept()?#?4.?接受連接 print('connect?addr:{}'.format(addr)) content?=s.recv(1024) print(str(content,?encoding='utf-8'))??#?接受來自客戶端的消息,并編碼打印出來 s.close()
import?socket client?=?socket.socket()?#?1.?新建socket client.connect(('127.0.0.1',?8999))?#?2.?連接服務端(注意,IP和端口要和服務端一致) client.send(bytes('Hello?World.?Hello?Socket',?encoding='utf-8'))?#?發(fā)送內容,注意發(fā)送的是字節(jié)字符串。 client.close()
python?server.py python?client.py
查看全部 -
seek()方法,可以移動文件的游標位置,它接受一個參數(shù),表示文件的位置,0:文件首部,1:當前位置,2:文件尾部,通過seek()可以把文件游標移動到文件首部但不刪除文件的內容。
查看全部 -
從模塊中導入函數(shù)并將其重命名:
from?...?import?as?... from?math?import?pow?as?mathpow
查看全部 -
__slots__的目的是限制當前類所能擁有的屬性.
class?Person(object): ????def?__init__(self,name): ????????self.name?=?name p?=?Person('lily') p.age?=?12 class?Student(object): ????__slots__?=?('name','gender') ????def?__init__(self,name,gender): ????????self.name?=?name ????????self.gender s?=?Student('Tom','Male') s.age?=?10??? print(s.age)???#會出錯
查看全部 -
dir()返回的是屬性是字符串列表;
通過getattr()和setattr()來獲取或設置對象屬性;
通過type()獲得變量類型。
i?=?10???type(i) dir(i) class?Person(object): ????def?__init__(self,name,age,**kwargs): ????????self.name?=?name ????????self.age?=?age ????????for?k,v?in?kwargs.items(): ????????????setattr(self,k,v)
查看全部 -
多重繼承,初始化方法只調用一次;
多重繼承的目的是從多種繼承樹選擇并繼承出子類,以便組合功能使用。
class?D(object): ????pass class?A(D): ????pass class?MK(object): ????pass class?Ck(MK): ????pass class?Ack(A,Ck): ????pass
查看全部 -
定義繼承類:
????????1.定義子類,在括號里寫明要繼承的父類;
????????2.初始化方法,需要調用super(子類,self).__init__(繼承的屬性).
class?Person(object): ????def?__init__(self,name,gender): ????????self.name?=?name ????????self.gender?=?gender class?Teacher(Person): ????def?__init__(self,name,gender,subject): ????????super(Teacher,self).__init__(name,gender) ????????self.subject?=?subject
查看全部 -
1.類方法需要使用@classmethod來標記為類方法,否則定義的還是實例方法;
2.類方法的第一個參數(shù)將傳入類本身,通常將參數(shù)名命名為 cls.
class?Animal(object): ????__count?=?0 ????def?__init__(self,name,age): ????????self.name?=?name ????????self.age?=?age ????????Animal.__count?+=?1 ????@classmethod ????def?get_count(cls): ????????return?cls.__count
查看全部 -
訪問私有屬性,可通過類中定義實例方法。
class?Animal(object): ????def?__init__(self,name,age,location): ????????self.__name?=?name ????????self.__age?=?age ????????self.__location?=?location ????def?get_info(self): ????????return?'name?=?{},?age?=?{},?location?=?{}'.format(self.__name,self.__age,self.__location)
查看全部 -
不被外部訪問的屬性為私有屬性,類屬性或實例屬性均不能對其訪問。私有屬性定義以雙下劃線“__”開頭。
class?Animal(object): ????def?__init__(self,name,age): ????????self.name?=?name ????????self.__age?=?age dog?=?Animal('Tom',3) print(dog.__age)???#會報錯
查看全部 -
面向對象編程:屬性 、 類 、 實例。
查看全部 -
1、解釋下什么是面向對象編程
查看全部 -
class Person(object):
? ?__slots__ = ('name', 'gender')
? ?def __init__(self, name, gender):
? ? ? ?self.name = name
? ? ? ?self.gender = gender
class Student(Person):
? ?__slots__ = ('score',)
? ?def __init__(self, name, gender, score):
? ? ? ?self.name = name
? ? ? ?self.gender = gender
? ? ? ?self.score = score
s = Student('Bob', 'male', 59)
s.name = 'Tim'
s.score = 99
print(s.score)注:__slots__ = ('name', 'gender') 限定屬性,不能動態(tài)添加屬性
查看全部 -
通過type()函數(shù),可以獲得變量的類型。
通過dir()方法,可以獲取變量的所有屬性:在dir列出的屬性中,有很多是以下劃線開頭和結尾的,這些都是特殊的方法,稱為內建方法,如果已知一個屬性名稱,要獲取或者設置對象的屬性,就需要用 getattr() 和 setattr( )函數(shù)了。
>>> getattr(p, 'name') # 獲取name屬性
'Alice'
>>> setattr(p, 'name', 'Adam') # 設置新的name屬性
>>> s.name
'Adam'
查看全部
舉報