Python----類對象和實例對象

目錄

一.類和類的實例

二.類屬性和實例屬性

三.私有屬性和公有屬性

四.靜態方法和類方法

?五.__init__方法,__new__方法和__del__方法:

六.私有方法和公有方法

七.方法的重載

八.方法的繼承

九.方法的重寫

十.對象的特殊方法

十一.對象的引用,淺拷貝和深拷貝


一.類和類的實例

類(Class):用來描述具有相同的屬性和方法的對象的集合。定義了該集合中每個對象所共有的屬性和方法。

類的實例:每個對象都屬于特定的類,并被稱為該類的實例(類的具體實體)。

看點實際的:

class Person1: #定義類Person1pass  # 類體為空語句
print(Person1, type(Person1), id(Person1))結果:
<class '__main__.Person1'> <class 'type'> 2077119090192

Person1:表示類對象的名稱,屬于"__main__"模塊

type(Person1):表示Person1一個類

id(Person1):表示Person1類的唯一標識符,用來區別其他對象

class Person1: #定義類Person1pass  # 類體為空語句
p1 = Person1() #實例化該類并創建一個對象p1
print(p1, type(p1),  id(p1))結果:
<__main__.Person1 object at 0x0000026DD4176DD0> <class '__main__.Person1'> 2670732996048

p1:p1是Person1類的一個對象,屬于“__main__”模塊,其內存地址為0x0000026DD4176DD0

type(p1):表示p1所屬的類是Person1,屬于“__main__”模塊

id(p1):表示p1對象的唯一標識符

二.類屬性和實例屬性

類變量(屬性):類變量在整個實例化的對象中是公用的,定義在類中且在函數體之外,通常不作為實例變量使用,屬于類本身,可以通過類名訪問/修改

class Person2:count = 0         #定義屬性count,表示計數name = "Person"   #定義屬性name,表示名稱def __init__(self):passdef fun(self):pass
#測試代碼
Person2.count += 1     #通過類名訪問,計數加1
print(Person2.count)   #類名訪問,讀取并顯示類屬性
print(Person2.name)    #類名訪問,讀取并顯示類屬性結果:
1
Person

實例變量:在類的聲明中,屬性是用變量來表示的,定義在方法內,比如定義到構造方法中,普通的方法內,通過self.變量名定義的屬性。

class Person3:                 #定義類Person3def __init__(self, name,age): #__init__方法self.name = name          #初始化self.name,self.age = age            #初始化self.age,def say_hi(self):         #定義類Person3的函數say_hi()print('您好, 我叫', self.name) 
#測試代碼
p1 = Person3('張三',25)    #對象實例化
p1.say_hi ()               #調用對象的方法
print(p1.age)    #通過p1.age(obj1.變量名)讀取成員變量age結果:
您好,我叫張三
25

改變類屬性值或實例變量值

class Person4:count = 0         #定義屬性count,表示計數name = "Person"   #定義屬性name,表示名稱
#測試代碼
p1 = Person4()         #創建實例對象1
p2 = Person4()         #創建實例對象2
print((p1.name, p2.name))   #通過實例對象訪問實例變量
Person4.name = "雇員"     #通過類變量訪問,設置類屬性值
print((p1.name, p2.name))   #讀取實例變量
p1.name = "員工"    #通過實例變量訪問,設置實例變量的值
print((p1.name, p2.name))   #讀取實例變量的值

結果:

三.私有屬性和公有屬性

Python類的成員沒有訪問控制限制

約定兩個下劃線開頭,但不以兩個下劃線結束的屬性是私有的(private),其他為公共的(public)

class A:def __init__(self):self.__name = 'class A'   #私有類屬性def get_name(self):print(self.__name)         #在類方法中訪問私有類屬性
#測試代碼
Aa = A()
Aa.get_name()
Aa.__name          #導致錯誤,不能直接訪問私有類屬性

結果:

@property

面向對象程序設計的封裝性原則要求不直接訪問類中的數據成員@property裝飾器裝飾訪問私有屬性的方法,使訪問方式更友好。

class Person1:def __init__(self, name):self.__name = name@propertydef name(self):return self.__name
#測試代碼
p = Person1('王五')
print(p.name)結果:
王五

@property裝飾器默認提供一個只讀屬性,可使用對應的getter、setter和deleter裝飾器實現其他訪問器函數,@property裝飾器會將方法轉換為相同名稱的只讀屬性,可以與所定義的屬性配合使用,這樣可以防止屬性被修改

class Person12:def __init__(self, name):self.__name = name@propertydef name(self):return self.__name@name.setterdef name(self, value):self.__name = value@name.deleterdef name(self):del self.__name
#測試代碼
p = Person12('姚六')
p.name = '王依依'
print(p.name)結果:
王依依

property的調用格式

property(fget=None, fset=None, fdel=None, doc=None) #fget為get訪問器,fset為set訪問器,fdel為del訪問器

class Person1:def __init__(self, name):self.__name = namedef getname(self):return self.__namedef setname(self, value):self.__name = valuedef delname(self):del self.__namename = property(getname, setname, delname, "I'm the 'name' property.")
#測試代碼
p = Person1('張三')
print(p.name)
p.name = '李四'
print(p.name)結果:
張三
李四

Python對象包含許多以雙下劃線開始和結束的變量,稱為特殊屬性?:

特殊方法含義示例
object.__dict__對象的屬性字典int.__dict__ #mappingproxy({'__new__': <built-in method __new__...
instance.__class__對象所屬的類i.__class__ #<class ‘int’>
int.__class__ #<class ‘type’>
class.__bases__類的基類元組int.__bases__ #(<class ‘object’>)
class.__base__類的基類int.__base__ #<class ‘object’>
class.__name__類的名稱int.__name__ # ‘int’
class.__qualname__類的限定名稱int.__qualname__ #’int’
class.__mro__查看繼承關系,基類元組int.__mro__ #(<class ‘int’>, <class ‘object’>)
class.mro()同上,可被子類重寫int.mro()#[<class ‘int’>, <class ‘object’>]
class.__subclasses__()子類列表int.__subclasses__()#[<class ‘bool’>,<enum ‘IntEnum’>,...

自定義屬性:

對象可以通過特殊屬性__dict__存儲自定義屬性:

class C1:pass
o=C1()
o.name='custom name'
print(o.__dict__)

結果:

攔截屬性的訪問:

可通過重載__getattr__和__setattr__攔截對成員的訪問,從而自定義屬性的行為

__getattr__只有在訪問不存在的成員時才會調用

__getattribute__攔截所有(包括不存在的成員)的獲取操作

注意:不要使用return self.__dict__[name]返回結果,因為self.__dict__[name]同樣會被__getattribute__攔截,造成無限遞歸死循環

__getattr__(self, name) #獲取屬性,比__getattribute__()優先調用

__getattribute__(self, name)# 獲取屬性

__setattr__(self, name, value)#設置屬性

__delattr__(self,name) #刪除屬性

class CustomAttribute(object):def __init__(self): #__init__方法(構造函數)pass		    #空語句def __getattribute__(self, name): #獲取屬性,攔截所有的獲取操作return str.upper(object.__getattribute__(self, name))#轉換為大寫def __setattr__(self, name, value):  #設置屬性object.__setattr__(self, name, str.strip(value))#去除收尾空格
#測試代碼
o = CustomAttribute()     #創建實例對象
o.firstname='   mary  '   #設置成員變量的值
print(o.firstname)        # 讀取并顯示成員變量的值

?結果:

四.靜態方法和類方法

靜態方法

?聲明與類的對象實例無關的方法

?靜態方法不對特定實例進行操作,訪問對象實例會導致錯誤

?靜態方法通過裝飾器@staticmethod來定義

?靜態方法一般通過類名來訪問,也可以通過對象實例調用

靜態方法的聲明和調用

#聲明

@staticmethod

def 靜態方法名([形參列表])

? ? ? ? 函數體

#調用

類名.靜態方法名([實參列表])

class TemperatureConverter:@staticmethoddef c2f(t_c): #攝氏溫度到華氏溫度的轉換t_c = float(t_c)t_f = (t_c * 1.8) + 32return t_f@staticmethoddef f2c(t_f): #華氏溫度到攝氏溫度的轉換t_f = float(t_f)t_c = (t_f - 32) /1.8return t_c
#測試代碼
print("1. 從攝氏溫度到華氏溫度.")
print("2. 從華氏溫度到攝氏溫度.")
choice = int(input("請選擇轉換方向:"))
if choice == 1:t_c = float(input("請輸入攝氏溫度: "))t_f = TemperatureConverter.c2f(t_c)print("華氏溫度為: {0:.2f}".format(t_f))
elif choice == 2:t_f = float(input("請輸入華氏溫度: "))t_c = TemperatureConverter.f2c(t_f)print("攝氏溫度為: {0:.2f}".format(t_c))
else:print("無此選項,只能選擇1或2!")

類方法

?Python允許聲明屬于類本身的方法,即類方法

?類方法不對特定實例進行操作,訪問對象實例會導致錯誤

?類方法通過裝飾器@classmethod來定義

?第一個形式參數必須為類對象本身,通常為cls

類方法的聲明和調用

#聲明

@classmethod

def 類方法名(cls,[形參列表])

????????函數體

#調用

類名.類方法名([實參列表])?

?

class Foo:classname = "Foo"def __init__(self, name):self.name = namedef f1(self):           #實例方法print(self.name)@staticmethoddef f2():               #靜態方法print("static")@classmethoddef f3(cls):            #類方法print(cls.classname)
#測試代碼
f = Foo("李")
f.f1()
Foo.f2()
Foo.f3()

結果:

?五.__init__方法,__new__方法和__del__方法:

?__init__方法即構造函數(構造方法),用于執行類實例的初始化。創建完對象后調用,初始化當前對象的實例,無返回值

?__new__方法是一個類方法,創建對象時調用,返回當前對象的一個實例,一般無需重載該方法

#__init__方法
class Point:def __init__(self, x = 0, y = 0): #構造函數self.x = xself.y = y
p1 = Point()                   #創建對象
print("p1({0},{1})".format(p1.x, p1.y))
p1 = Point(5, 5)               #創建對象
print("p1({0},{1})".format(p1.x, p1.y))結果:
p1(0,0)
p1(5,5)

?__del__方法:

__del__方法即析構函數(析構方法),用于實現銷毀類的實例所需的操作,如釋放對象占用的非托管資源(例如:打開的文件、網絡連接等)

默認情況下,當對象不再被使用時,__del__方法運行,由于Python解釋器實現自動垃圾回收,即無法保證這個方法究竟在什么時候運行

通過del語句,可以強制銷毀一個對象實例,從而保證調用對象實例的__del__方法

class Person:count = 0                #定義類域count,表示計數def __init__(self, name,age): #構造函數self.name = name self.age = age    Person.count += 1   #創建一個實例時,計數加1def __del__(self):      #析構函數Person.count -= 1   #銷毀一個實例時,計數減1def get_count():        #定義類Person的方法get_count()print('總計數為:', Person.count)
print('總計數為:',Person.count) 	#類名訪問
p1 = Person('張三',25)    	#創建對象
Person.get_count()  		#通過類名訪問
p2 = Person('李四',28)   	#創建對象
Person.get_count()  		#通過類名訪問
del p1            		#刪除對象p1
Person.get_count()  		#通過類名訪問
del p2            		#刪除對象p2
Person.get_count()  		#通過類名訪問

結果:

六.私有方法和公有方法

?兩個下劃線開頭,但不以兩個下劃線結束的方法是私有的(private),其他為公共的(public)

?以雙下劃線開始和結束的方法是Python的專有特殊方法。

?不能直接訪問私有方法,但可以在其他方法中訪問

class Book:def __init__(self, name, author, price):self.name = nameself.author = authorself.price = pricedef __check_name(self):  #定義私有方法,判斷name是否為空if self.name == '' : return Falseelse: return Truedef get_name(self):      #定義類Book的方法get_nameif self.__check_name():print(self.name,self.author) #調用私有方法else:print('No value')
b = Book('Python語言程序設計','嵩天',50.0)    #創建對象
b.get_name()                    #調用對象的方法
b.__check_name()                

結果:

七.方法的重載

?其他程序語言方法可以重載,即定義多個重名的方法,而方法簽名唯一(方法名、參數數量和參數類型)

?Python本身是動態語言,方法的參數沒有聲明類型(在調用傳值時確定參數的類型),參數的數量可變。故Python對象方法不需要重載,定義一個方法即可實現多種調用,從而實現相當于其他程序設計語言的重載功能

class Person21:                #定義類Person21def say_hi(self, name=None): #定義類方法say_hiself.name = name if name==None: print('您好! ')else: print('您好, 我叫', self.name)
p21 = Person21()           #創建對象
p21.say_hi()               #調用對象的方法,無參數
p21.say_hi('威爾遜')        #調用對象的方法,帶參數

結果:

再看以下代碼:

在Python類體中可以定義多個重名的方法,雖然不會報錯,但只有最后一個方法有效,所以建議不要定義重名的方法

class Person22:def say_hi(self, name):    #帶兩個參數print('您好, 我叫', self.name)def say_hi(self, name, age): #帶三個參數print('hi, {0}, 年齡:{1}'.format(name,age))
p22 = Person22()               #創建對象
p22.say_hi('Lisa', 22)         #調用對象的方法
p22.say_hi('Bob')              # error

結果:

?

八.方法的繼承

?派生類:Python支持多重繼承,即一個派生類可以繼承多個基類

?如果類定義中沒有指定基類,默認基類為object。object是所有對象的根基類

?聲明派生類時,必須在其構造函數中調用基類的構造函數

派生類的聲明和調用:

#聲明

class 派生類名(基類1,[基類2...]):

? ? ? ? 類體

#調用

基類名.__init__(self, 參數列表)

或者:

super().__init__(參數列表)?

class Person:                 #基類def __init__(self, name, age): #構造函數self.name = nameself.age = agedef say_hi(self):         #定義基類方法say_hiprint('您好, 我叫{0}, {1}歲'.format(self.name, self.age))
class Student(Person):         #派生類def __init__(self, name, age, stu_id): #構造函數Person.__init__(self, name, age) #調用基類構造函數self.stu_id = stu_id    #學號def say_hi(self):          #定義派生類方法say_hiPerson.say_hi(self)    #調用基類方法say_hiprint('我是學生, 我的學號為:', self.stu_id)
p1 = Person('張王一', 33)            #創建對象
p1.say_hi()
s1 = Student('李姚二', 20, '2018101001') #創建對象
s1.say_hi()

?結果:

通過類的方法mro()或類的屬性__mro__可以輸出其繼承的層次關系

>>> class A: pass

>>> class B(A):pass

>>> class C(B):pass

>>> class D(A):pass

>>> class E(B,D):pass

>>> D.mro()

[<class '__main__.D'>, <class '__main__.A'>, <class 'object'>]

>>> E.__mro__

(<class '__main__.E'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.A'>, <class 'object'>)

?

九.方法的重寫

通過繼承,派生類繼承基類中除構造方法之外的所有成員,如果在派生類中重新定義從基類繼承的方法,則派生類中定義的方法覆蓋從基類中繼承的方法

class Dimension:  #定義類Dimensionsdef __init__(self, x, y): #構造函數self.x = x       #x坐標self.y = y       #y坐標def area(self):       #基類的方法area()pass
class Circle(Dimension):  #定義類Circle(圓)def __init__(self, r): #構造函數Dimension.__init__(self, r, 0)def area(self):        #覆蓋基類的方法area()return 3.14 * self.x * self.x   #計算圓面積
class Rectangle(Dimension):  #定義類Rectangle(矩形)def __init__(self, w, h): #構造函數Dimension.__init__(self, w, h)def area(self):  #覆蓋基類的方法area()return self.x * self.y  #計算矩形面積
d1 = Circle(2.0)          #創建對象:圓
d2 = Rectangle(2.0, 4.0)   #創建對象:矩形
print(d1.area(), d2.area())  #計算并打印圓和矩形面積

結果:

十.對象的特殊方法
特殊方法含義
__lt__、__add__等對應運算符<,+等
__init__、__del__創建或銷毀對象時調用
__len__對應內置函數len()
__setitem__、__getitem__按索引賦值、取值
__repr__(self)對應于內置函數repr()
__str__(self)對應于內置函數str()
__bytes__(self)對應于內置函數bytes()
__format__(self,format_spec)對應于內置函數format()
__bool__(self)對應于內置函數bool()
__hash__(self)對應于內置函數hash()
__dir__(self)對應于內置函數dir()

對象的特殊方法實例:?

class Person:def __init__(self, name, age): #特殊方法(構造函數)self.name = nameself.age = agedef __str__(self):          #特殊方法return '{0}, {1}'.format(self.name,self.age)def __repr__(self):         #特殊方法return '{},{}'.format('李四','24')
#測試代碼
p1 = Person('張三', 23)
print(p1)
print(repr(p1))結果:
張三,23
李四,24

運算符的重載與對象的特殊方法

Python的運算符實際上是通過調用對象的特殊方法實現的

運算符特殊方法含義
<,<=,==,>,>=,!=

__lt__(),__le__(),__eq__(),__gt__()

,__ge__(),__ne__()

比較運算符
|,^,&

__or__(),__ror__(),__xor__(),

__rxor__(),__and__(),__rand__()

按位或、異或、與
|=,^=,&=__ior__(),__ixor__(),__iand__()按位復合賦值運算
<<,>>__lshift__(),__rlshift__(),__rshift__(),__rrshift__()移位運算
<<=,>>=__ilshift__(),__irlshift__(),__irshift__(),__irrshift__()移位復合賦值運算
+,-__add__(),__radd__(),__sub__(),__rsub__()加法與減法
+=,-+__iaddr__(),__isub__()加減復合賦值運算
*,/,%,//

__mul__(),__rmul__(),__truediv__(),__rtruediv__(),

__mod__(),__rmod__(),__floordiv__(),__rfloordiv__()

乘、除、取余、整數除法
*=,/=,%=.//=

__imul__(),__idiv__(),__itruediv__(),__imod__(),__ifloordiv__()

乘除復合賦值運算
+x,-x__pos__(),__neg__()正負號
~x__invert__()按位翻轉
**, **=__pow__(),__rpow__(),__ipow__()指數運算

示例:

class MyList():def __init__(self, *args):self.__mylist = []                 #初始化私有屬性,空列表for i in args:self.__mylist.append(i)def __add__(self, other):              #重載運算符"+",每個元素增加nfor i in range(len(self.__mylist)):self.__mylist[i] += otherdef __sub__(self, other):              #重載運算符"-",每個元素減少nfor i in range(len(self.__mylist)):self.__mylist[i] -= otherdef __mul__(self, other):for i in range(len(self.__mylist)):self.__mylist[i] *= otherdef __truediv__(self, other):for i in range(len(self.__mylist)):self.__mylist[i] /= otherdef __len__(self):return len(self.__mylist)def __repr__(self):str1 = ''for i in range(len(self.__mylist)):str1 += str(self.__mylist[i])+' 'return str1
alist = MyList(1,2,3,4,5);
alist + 2;
print(repr(alist));
alist - 1;
print(repr(alist));
alist * 2;
print(repr(alist));
alist/2;print(repr(alist));
print(len(alist))

@functools.total_ordering:

支持大小比較的對象需要實現特殊方法:__eq__、__lt__、__le__、__ge__、__gt__,但使用functools模塊的total_ordering裝飾器裝飾類,則只需要實現__eq__,以及__lt__、__le__、__ge__、__gt__中的任意一個

import functools
@functools.total_ordering
class Student:def __init__(self, firstname, lastname):  #姓和名self.firstname = firstnameself.lastname = lastnamedef __eq__(self, other):     #判斷姓名是否一致return ((self.lastname.lower(), self.firstname.lower()) ==(other.lastname.lower(), other.firstname.lower()))def __lt__(self, other):     #self姓名<other姓名return ((self.lastname.lower(), self.firstname.lower()) <(other.lastname.lower(), other.firstname.lower()))
#測試代碼
if __name__ == '__main__':s1 = Student('Mary','Clinton')s2 = Student('Mary','Clinton')s3 = Student('Charlie','Clinton')print(s1==s2)print(s1>s3)print(s1<s3)

結果:

__call__方法:

__call__方法的對象稱之為可調用對象(callable),即該對象可以像函數一樣被調用

class GDistance:       #類:自由落體距離def __init__(self, g): #構造函數self.g = g def __call__(self, t): #自由落體下落距離return (self.g*t**2)/2
#測試代碼
if __name__ == '__main__':e_gdist = GDistance(9.8) #地球上的重力加速度for t in range(11):   #自由落體0~10秒的下落距離print('下落距離為{:0.2f}m'.format(e_gdist(t))) 

結果:

十一.對象的引用,淺拷貝和深拷貝

對象的引用:在創建一個對象并賦值給一個變量時,該變量是指向該對象的引用,其id()返回值保持一致

>>> acc10=['Charlie', ['credit', 0.0]] 
#創建列表對象(信用卡賬戶),變量acc10代表主卡
>>> acc11=acc10                                 
#變量acc11代表副卡,指向acc10(主卡)的對象
>>> id(acc10),id(acc11)                      
#二者id相同,輸出:
(2739033039112, 2739033039112)

對象的淺拷貝:

對象的拷貝可以使用以下方法

切片操作,例如,acc11[:]。

對象實例化,例如,list(acc11)。

copy模塊的copy函數,例如,copy.copy(acc1)。

import copy
acc1=['Charlie',['credit',0.0]]
acc2=acc1[:]  #使用切片方式拷貝對象
acc3=list(acc1)  #使用對象實例化方法拷貝對象
acc4=copy.copy(acc1) #使用copy.copy函數拷貝對象
print(id(acc1),id(acc2),id(acc3),id(acc4)) #拷貝對象id各不相同
acc2[0]='Mary'  #acc2的第一個元素賦值,即戶主為'Mary'
acc2[1][1]=-99.9 #acc2的第二個元素的第二個元素賦值,即消費金額99.9
print(acc1, acc2)           #注意,acc2消費金額改變99.9,acc1也隨之改變

結果:

對象的深拷貝

Python復制一般為淺拷貝,即復制對象時對象中包含的子對象并不復制,而是引用同一個子對象。如果要遞歸復制對象中包含的子對象,需使用深拷貝

深拷貝需要使用copy模塊的deepcopy函數,拷貝對象中包含的子對象

>>> acc5[0]='Clinton' #acc5的第1個元素賦值,即戶主為'Clinton'

>>> acc5[1][1]=-19.9?? #acc5的第2個元素的第2個元素賦值,即消費金額19.9

>>> acc1,acc5

(['Charlie', ['credit', 0.0]], ['Clinton', ['credit', -19.9]])

>>> id(acc1),id(acc5),id(acc1[1]),id(acc5[1])

(2739033040648, 2739033040264, 2739033040520, 2739033039688)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165084.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165084.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165084.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件開發模式開源和閉源的優劣之爭

開源和閉源&#xff0c;兩種截然不同的開發模式&#xff0c;對于大模型的發展有著重要影響。開源讓技術共享&#xff0c;吸引了眾多人才加入&#xff0c;推動了大模的創新。而閉源則保護了商業利益和技術優勢&#xff0c;為大模型的商業應用提供了更好的保障。 開源與閉源軟件的…

基于命令行模式設計退款請求處理

前言 這篇文章的業務背景是基于我的另一篇文章: 對接蘋果支付退款退單接口-CSDN博客 然后就是說設計模式是很開放的東西,可能我覺得合適,你可能覺得不合適,這里只是做下討論,沒有一定要各位同意的意思.... 相關圖文件 這里我先把相關的圖文件放上來,可能看著會比較清晰點 代碼邏…

sql之left join、right join、inner join的區別

sql之left join、right join、inner join的區別 left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄 inner join(等值連接) 只返回兩個表中聯結字段相等的行 舉例如下&#xff1…

Web服務器(go net/http) 處理Get、Post請求

大家好 我是寸鐵&#x1f44a; 總結了一篇Go Web服務器(go net/http) 處理Get、Post請求的文章? 喜歡的小伙伴可以點點關注 &#x1f49d; 前言 go http請求如何編寫簡單的函數去拿到前端的請求(Get和Post) 服務器(后端)接收到請求后&#xff0c;又是怎么處理請求&#xff0c…

【限時免費】20天拿下華為OD筆試之【前綴和】2023B-尋找連續區間【歐弟算法】全網注釋最詳細分類最全的華為OD真題題解

文章目錄 題目描述與示例題目描述輸入描述輸出描述示例一輸入輸出說明 示例二輸入輸出 解題思路代碼PythonJavaC時空復雜度 華為OD算法/大廠面試高頻題算法練習沖刺訓練 題目描述與示例 題目描述 給定一個含有N個正整數的數組&#xff0c;求出有多少個連續區間&#xff08;包…

【網絡奇緣】- 計算機網絡|分層結構|ISO模型

&#x1f308;個人主頁: Aileen_0v0&#x1f525;系列專欄: 一見傾心,再見傾城 --- 計算機網絡~&#x1f4ab;個人格言:"沒有羅馬,那就自己創造羅馬~" 目錄 計算機網絡分層結構 OSI參考模型 OSI模型起源 失敗原因: OSI模型組成 協議的作用 &#x1f4dd;全文…

二十四、RestClient操作文檔

目錄 一、新增文檔 1、編寫測試代碼 二、查詢文檔 1、編寫測試代碼 三、刪除文檔 1、編寫測試代碼 四、修改文檔 1、編寫測試代碼 五、批量導入文檔 批量查詢 一、新增文檔 1、編寫測試代碼 SpringBootTest public class HotelDocumentTest {private RestHighLevelC…

【棧】不同字符的最小子序列

題目&#xff1a; /*** 思路&#xff1a;棧,使用數組記錄每個字母出現的次數&#xff0c;再用一個數組標記字符是否在棧中* 遍歷棧&#xff0c;存儲字符時比較棧頂字符&#xff0c;若小于棧頂字符并且后面有重復的字符則* 棧頂元素出棧&#xff0c;否則入棧。** au…

PS 注釋工具 基礎使用方法講解

好 上文PS 顏色取樣器&標尺工具 基本使用講解中 我們講了 顏色取樣器和標尺工具的基本用法 下面我們來看一下 注釋工具 這個 主要是后面 比較大的作品 可能不是我們一個人取設計 團隊作圖 就需要用到它 選擇 注釋工具 后 我們隨便點擊圖像任何一個位置 右側就會出現一個輸…

gitlab各版本安裝注意點:

研發團隊在安裝gitlab各版本過程中可能遇到各種問題&#xff0c;為了后續容易查看特將我們在實踐過程中遇到的各類問題要點總結如下&#xff1a; gitlab 10.8.3 (564c342&#xff09;安裝 centos Linux yum安裝網址查找網址&#xff1a;gitlab/gitlab-ce - Results for gitla…

執行shell腳本提示syntax error: unexpected end of file

具體報錯如下&#xff1a; ./test.sh: line 36: syntax error: unexpected end of file執行命令時需將test.sh替換為實際的腳本文件名稱。 情形一&#xff1a; shell腳本在Windows下編寫&#xff0c;上傳到Linux上執行&#xff0c;由于 fileformat 類型不同&#xff0c;所以報…

黑馬點評12-實現好友關注/取關功能,查看好友共同關注列表

好友關注 數據模型 數據庫中的tb_follow記錄博主與粉絲的關系 tb_follow表對應的實體類 Data EqualsAndHashCode(callSuper false) Accessors(chain true) TableName("tb_follow") public class Follow implements Serializable {private static final long ser…

代碼隨想錄算法訓練營第三十二天| 122 買賣股票的最佳時機 || 55 跳躍游戲 45 跳躍游戲 ||

目錄 122 買賣股票的最佳時機 || 55 跳躍游戲 45 跳躍游戲 || 122 買賣股票的最佳時機 || 設置變量now代表此時買入的股票&#xff0c;為賦值為Integer.MAX_VALUE&#xff0c;遍歷prices數組&#xff0c;有如下兩種情況&#xff1a; 如果比now小說明不能售出&#xff0c;可以…

關于unicloud云對象或云函數獲取時間不對的問題

話不多說&#xff0c;直接上代碼&#xff1a; function timeWeekFormat() { //定義一個日期對象; var dateTime getOffsetDate(8); //獲得系統年份; var year dateTime.getFullYear(); //獲得系統月份; var month dateTime.getMonth() 1; //獲…

棧和隊列的OJ題--12.括號匹配

12.括號匹配 20. 有效的括號 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a;該題比較簡單&#xff0c;是對棧特性很好的應用&#xff0c;具體操作如下&#xff1a;循環遍歷String中的字符&#xff0c;逐個取到每個括號&#xff0c;如果該括號是&#xff1a;1. …

Git工作流和Commit規范

Git大家都非常熟悉了&#xff0c;就不做過多介紹&#xff0c;但是如何用好Git、如何進行合理的分支開發、Merge你是否有一個規范流程呢&#xff1f;&#x1f4a4; 不論是一個團隊一起開發一個項目&#xff0c;還是自己獨立開發一個項目&#xff0c;都少不了要和Git打交道&…

【NGINX--5】身份驗證

1、HTTP 基本身份驗證 需要通過 HTTP 基本身份驗證保護應用或內容。 生成以下格式的文件&#xff0c;其中的密碼使用某個受支持的格式進行了加密或哈希處理&#xff1a; # comment name1:password1 name2:password2:comment name3:password3第一個字段是用戶名&#xff0…

紫光展銳V8821榮獲“中國芯”重大創新突破產品獎

近日&#xff0c;“中國芯”優秀產品評選落下帷幕&#xff0c;紫光展銳首顆5G IoT-NTN衛星通信SoC芯片V8821憑借在衛星通信前沿領域的技術創新&#xff0c;從285家芯片企業、398款芯片產品中脫穎而出&#xff0c;榮獲第十八屆“中國芯”年度重大創新突破產品獎。 “中國芯”優…

ReentrantLock源碼解析

ReentrantLock源碼解析 文章目錄 ReentrantLock源碼解析一、ReentrantLock二、ReentrantLock 的 Sync、FairSync、NonfairSync2.1 Sync、FairSync、NonfairSync2.2 NonfairSync 下的 tryAcquire2.3 FairSync下的 tryAcquire2.4 tryRelease 三、lock.lock()3.1 NonfairSync.lock…

優橙內推青海專場——5G網絡優化(中高級)工程師

可加入就業QQ群&#xff1a;801549240 聯系老師內推簡歷投遞郵箱&#xff1a;hrictyc.com 內推公司1&#xff1a;浙江明訊網絡技術有限公司 內推公司2&#xff1a;南京華蘇科技有限公司 內推公司3&#xff1a;杭州華星創業通信技術有限公司 浙江明訊網絡技術有限公司 浙江明…