日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

属性,类方法,静态方法,反射

發(fā)布時(shí)間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 属性,类方法,静态方法,反射 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

1.屬性 @property

2.類(lèi)方法 @classmethod

3.靜態(tài)方法? @staticmethod

4.反射

1.屬性:

class? A:

  __name = "武大"

  def __init__(self,name,weight,height):

    self.name = name

    self.__weight = weigh

    self.height = height

  def bmi(self):

    return? self.__weight/height**2

a = A("alex",70,1.8)

print(a.bmi())

class A:

  def __init__(self,name,weight,height):

    self.name = name

    self.__weight = weight

    self.height? = height

  @property

  def bmi(self):

    return self.__weight/height**2

a = A("alex",70,1.8)

print(a.bmi)

屬性:將方法偽裝成屬性雖然在代碼層面上沒(méi)有任何高深之處,但是讓其看起來(lái)更合理.

屬性的改和刪除

class A:

  def __init__(self,name,weight,height):

    self.name = name

    self.__weight = weight

    self.height = height

  @property

  def bmi(self):

    return self.__weight/height**2

  @property

  def weight(self):

    return? self.__weight?

  @weight.setter

  def weight(self,new_weight):

    self.__weight = new_weight

  @weight.deleter

  def weight(self):

    del self.__weight

a = A("alex",70,1.8)

print(a.bmi)

print(a.weight)

a.weight = 80

更改屬性,一共進(jìn)行了兩步操作:

第一步:對(duì)屬性進(jìn)行改操作自動(dòng)執(zhí)行,被這個(gè)@weight.setter裝飾器裝飾的方法.

第二步:將新值傳給被@weight.setter裝飾器裝飾的方法里面,當(dāng)做參數(shù)

print(a.weight)

print(a.bmi)

del a.weight

print(a.weight)  #因?yàn)閟elf.__weight被刪除了,找不到self.__weight,所進(jìn)行到這一步會(huì)報(bào)錯(cuò).

刪和改一樣的運(yùn)行步驟.

2.類(lèi)方法@classmethod

class? A:

  __name = "武大"

  def func(self):

    print("in? ?a")

  @classmethod

  def func1(cls):

    print(cls,"in? ? b")

a1 = A()

a1.func1()

A.func1()

類(lèi)名去調(diào)用類(lèi)方法,自動(dòng)將類(lèi)的空間傳給類(lèi)方法中的cls(在Python中約定俗成這么寫(xiě))

對(duì)象如果調(diào)用類(lèi)方法,自動(dòng)將類(lèi)空間傳給類(lèi)中的cls.

class? A:

  __name = "wusir"

  def func(self,new_name):

    A.__name = new_name

    return A.__name

  @classmethod

  def func1(cls,new_name):

    A.__name = new_name

    return A.__name

a2 = A()

print(a2.func1("alex"))

print(A.func1("alex"))

print(A,func(22,"alex")

什么情況下使用類(lèi)方法?

直接讓類(lèi)去操作類(lèi)中的方法,沒(méi)有必要?jiǎng)?chuàng)建對(duì)象再操作的時(shí)候用類(lèi)方法.

3.靜態(tài)方法:@staticmethod

靜態(tài)方法:在類(lèi)中定義一個(gè)靜態(tài)方法,無(wú)需傳入類(lèi)空間,對(duì)象空間,可以當(dāng)普通函數(shù)取用.

class A:

  @staticmethod

  def func(username,password):

    print(555555)

a = A()

a.func()

A.func()

4.反射:通過(guò)字符串操作一個(gè)空間(對(duì)象)

反射針對(duì)的是拿到的是一個(gè)字符串類(lèi)型,然后對(duì)這個(gè)類(lèi)進(jìn)行操作.

反射共有四種方法:

getattr() : 從對(duì)象中得到這個(gè)屬性對(duì)應(yīng)的值.

hasattr() : 判斷此對(duì)象中,有沒(méi)有這個(gè)屬性.

setattr() : 對(duì)一個(gè)對(duì)象或者類(lèi)設(shè)置(增加或者改)屬性? ??

delattr() : 刪除對(duì)象或者類(lèi)屬性

我們從四個(gè)方面來(lái)觀(guān)察反射:

1.實(shí)例化一個(gè)對(duì)象研究:

class? A:

   name =? "alex"

  def __init__(self,age,sex):

    self.__age = age

    self.sex = sex

  def func(self):

    print(33333)

a = A(23,"女")

print(getattr(a,"name"))  #從對(duì)象中得到這個(gè)屬性對(duì)應(yīng)的值

print(hasattr(a,"sex"))  #判斷此對(duì)象中,有沒(méi)有這個(gè)屬性.

setattr(a,"height",180)? ? ? #對(duì)一個(gè)對(duì)象設(shè)置(增加或者改)屬性

delattr(a,"sex")    #對(duì)一個(gè)對(duì)象屬性刪除,不可刪除和修改

2.在類(lèi)中研究:

class A:

  name = "wusir"

  def func(self):

    print(6666)

print(getattr(A,name))

print(hasattr(A,func))

setattr(A,"sex","女")

delattr(A,"name)

3.在其他模塊去研究:

import? 模塊名    #引入模塊

print(getattr(模塊名,"變量名/函數(shù)名/類(lèi)名等")

4.在本模塊(本文件)去研究:

import? sys??    #引入本模塊

print(getattr(sys.modules[__name__],"變量名/函數(shù)名/類(lèi)名等")

?

轉(zhuǎn)載于:https://www.cnblogs.com/fengkun125/p/9260424.html

總結(jié)

以上是生活随笔為你收集整理的属性,类方法,静态方法,反射的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。