#python 是動態程式語言,可以在執行的過程中修改**,不需要編譯就可以直接執行
#綜合:動態繫結類屬性和類方法,物件屬性和物件方法
class
test01(object):
def__init__
(self, name):
self.name =name
defeat(self):
print("
%s 正在吃放
" %self.name)
defrun(self):
print("
%s 想要奔跑
" %self.name)
defplay(self):
print("
%s 正在玩耍
" %self.name)
t1 = test01("張三"
(t1.name)
#動態新增例項屬性
t1.age = 15
(t1.age)
print("
*" * 60)
#動態新增例項方法,如果直接使用
#t1.run = run
#t1.run()
#是不對的,為什麼呢?run()方法需要傳self引數,直接這麼寫,run()並沒有傳引數,不是物件t1的例項方法
#正解:
import
types
t1.run =types.methodtype(run, t1)
t1.run()
print("
*" * 60)
#動態新增類屬性(這樣所有的物件例項都可以使用這個屬性了)
t2 = test01("李四"
)t3 = test01("王五"
)test01.add = "北京"
(t2.add)
(t3.add)
print("
*" * 60)
#動態新增類方法(靜態方法也是一樣)
test01.play =play
t2.play()
t3.play()
print("
*" * 60)
#補充:動態刪除類屬性
#del 物件.屬性名
#delattr(物件, "屬性名")
#補充:如何限定例項物件只能動態的新增某些指定的屬性呢?
#為了達到限制的目的,python允許在定義class的時候,定義乙個特殊的__slots__變數,來限制該class例項能新增的屬性
#注意:使用__slots__要注意,__slots__定義的屬性僅對當前類例項起作用,對繼承的子類是不起作用的
class
person(object):
#必須把name也新增到__slots__,不然會找不到該屬性
__slots__ = ("
name
", "
age", "
add"
)p =person()
p.age = 15p.add = "長沙"
print(p.age, "
====
", p.add)
#以上都沒有報錯,因為name、age、add都是在範圍裡的
p.score = 100
(p.score)
#沒有score
靜態繫結和動態繫結
c 中,非虛函式都是靜態繫結,而虛函式卻是動態繫結。為了能夠更清楚地了解靜態繫結與動態繫結,我們可以看下面這個例子 include using namespace std class b 那麼兩次呼叫fun 函式是否相同呢?當然,如果d中沒有定義fun 函式 如例子中 那麼兩次呼叫的行為肯定會是一樣...
靜態繫結和動態繫結
物件的靜態型別 物件在宣告是採用的型別,在編譯期確定 物件的動態型別 當前物件所指的型別,在執行期決定,物件的動態型別可以更改,但靜態型別無法更改。靜態繫結 繫結的是物件的靜態型別,某特性 比如函式 依賴於物件的靜態型別,發生在編譯期。動態繫結 繫結的是物件的動態型別,某特性 比如函式 依賴於物件的...
C 靜態繫結和動態繫結
c 為了支援多型性,才用了動態繫結和靜態繫結。首先理解四個名詞 1.物件的靜態型別 物件在宣告時採用的型別,是在編譯期確定的。2.物件的動態型別 目前所指物件的型別,是在執行期決定的。class b class c public b class d public b d pd new d pd的靜態...