#動態新增屬性:
#就是這個屬性不是在類定義的時候新增的,而是在程式執行過程中新增的,動態新增屬性有兩種方法,
#第乙個是直接通過物件名.屬性名,第二個是通過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...