python中動態新增屬性和方法

2021-08-30 04:32:32 字數 2668 閱讀 6234

#動態新增屬性:

#就是這個屬性不是在類定義的時候新增的,而是在程式執行過程中新增的,動態新增屬性有兩種方法,

#第乙個是直接通過物件名.屬性名,第二個是通過setattr新增:

#1.物件.屬性

class person(object):

def __init__(self,name):

self.name = name

p=person('fjq')

p.age=18

print(p.age)

#hasattr:用來判斷某個物件是否有某個屬性

#setattr:用來給某個物件新增屬性的

if hasatter(p,'name'):

print(true)

else:

print(false)

setattr(p,'age',18)

print(p.age)

#動態新增方法:就是方法不是在類定義的時候新增的。而是建立完這個

#物件之後新增的。這時候就應該使用到types.methodtype這個方法。

#1.動態新增例項方法

import types

class person(object):

def __init__(self,name):

self.name = name

p1 = person('p1')

p2 = person('p2')

def run(self):

print('%s 在奔跑'%self.name)

#其中types.methodtype的第乙個引數是這個函式本身,

#第二個引數是在呼叫run這個函式的時候,傳給run方法的第乙個引數。

p1.run=types.methodtype(run,p1)

p2.run=types.methodtype(run,p2)

p1.run()

p2.run()

#2.動態新增類方法:就是將這個方法新增給這個類。新增給類與新增給屬性

#不同,不需要使用types.methodtype,直接將這個函式賦值給類就可以了

#但是需要在這個函式上使用@classmethod裝飾器設定成類方法

class person(object):

country = 'china'

def __init__(self,name):

self.name = name

@classmethod

def run(cls):

print('%s 在奔跑'%cls.country)

person.run=run

person.run()

#3.動態新增靜態方法:將方法新增給類,直接使用@staticmethod

#裝飾器

class person(object):

country = 'china'

def __init__(self,name):

self.name = name

@staticmethod

def run():

print('正在奔跑')

person.run=run

person.run()

class person(object):

country = 'china'

def __init__(self,name):

self.name = name

@staticmethod #靜態方法既可以傳引數,也可以不傳引數

def stronger():

print('%s在變強'% person.country)

person.stronger = stronger

person.stronger()

#動態刪除屬性和方法:

#1.del 物件.屬性名

#2.delattr(物件,"屬性名")

class person(object):

country = 'china'

def __init__(self,name):

self.name = name

p = person('fjq')

# delattr(p,'name')

print(p.name)

# del p.name

# print(p.name)

#__slots__魔術變數:

#有時候我們想指定某個類的物件,只能使用我指定的這些屬性

#不能隨便新增其他的屬性,那麼這時候就可以使用__slots__魔術變數。

#這個魔術變數是乙個列表或者乙個元組,裡面存放屬性的名字,

#以後在物件外面,就只能新增這個魔術變數中指定的屬性,

#不能新增其他屬性。

class person(object):

__slots__=('name','age')

def __init__(self,name):

self.name = name

p1=person('fjq')

print(p1.name)

p1.age=18

print(p1.age)

#這將會報錯,因為height屬性不在魔術變數的元組中存在

p1.height=170

print(p1.height)

python動態新增屬性和方法

class person def init self,name,age self.name name self.age age p1 person ff 28 print p1.name,p1.age 給例項物件動態新增 屬性 p1.female print p1.給類動態新增屬性 person.h...

Python動態新增屬性和方法

動態新增屬性,就是這個屬性不是在類定義的時候新增的,而是在程式執行過程中新增的,動態新增屬性有兩種方法,第乙個是直接通過物件名.屬性名,第二個是通過setattr新增 1 第一種 使用物件.屬性名新增 p.ageb 18 2 第二種,使用setattr函式新增 class person def in...

Python動態新增屬性

class student object classmethod修飾的屬性可以通過類變數和類例項變數直接呼叫 因為在這兩種情況下都可以將類變數繫結到 classmethod修飾的方法的第乙個引數上 classmethod def eat cls print eating.當類的例項動態新增屬性時 c...