物件導向高階(六) 動態建立類

2021-09-29 18:57:19 字數 1349 閱讀 2233

還記得嘛?我們總說,python一切皆物件!是吧

我們經常這麼說,但是,真的是一切皆物件嘛?

class demo(object):

def __init__(self, name):

self.name = name

p = demo("ponny")

我們列印一下這個例項化的p的型別,看看是啥!

print(type(p))
可以看出,這是例項是源自於demo這個類的對吧

那你說,demo這個類是源自於什麼呢?

(猜不出來就列印一下嘛)

這是啥??type??

如果按照上面的說法

難道說... ...

沒錯!就是你想的那樣,這個類是源自於type

沒想到吧!

例項源自於demo這個類,反著說就是demo這個類生成了例項

那要是這樣說的話

我應該是可以通過type方法來生成乙個類才對是吧

試一試

a = type("hello", (object,), )

print(type(a))

我們發現列印出來的竟然是

那說明什麼?說明我們已經成功的建立了乙個類

那咱們就來研究一下,這個type中的各個位置填的都是啥吧

這兩個是的等價的、根據模擬就知道每個位置都是幹什麼的了嘛

那有問題啊!類裡面不只有屬性啊,還有方法啊!

你這一行type,能寫嗎?

你能想到的問題,上帝能想不到嘛?

我們要首先在外面定義乙個方法,然後再寫在你的字典裡

def __init__(self, name, age):

self.name = name

self.age = age

hello = type("hello", (object,), )

這樣就相當於把你的方法寫到了這個類上了

我們可以試試

s = hello("ponny", 18)

print(s.name, s.age)

執行一下:

ponny 18
對吧,這樣就達到了我們的目的

有什麼用呢??

你現在可能感受不到

但是,要記住這種使用方法

到某個時刻

你會突然發現這個東西的奧妙!

*這個是真的很重要*

*但你現在感覺不到*

(六)物件導向高階程式設計

如果我們想要限制例項的屬性怎麼辦?比如,只允許對student例項新增name和age屬性。為了達到限制的目的,python允許在定義class的時候,定義乙個特殊的slots變數,來限制該class例項能新增的屬性 class student object slots name age 用tupl...

物件導向 高階

json方式的物件導向 json 把方法包在json裡 json物件導向 有人管他叫 命名空間 在公司裡 把同一類 的方法包在一起 拖拽和繼承 物件導向的拖拽 改寫原有的拖拽 繼承 asdf 拖拽 instanceof 檢視物件是某個類的例項 使用繼承 限制範圍的拖拽類 建構函式的偽裝 屬性的繼承 ...

物件導向高階

public class person public void print public class student extends person 重寫了父類方法 public void print public class demo public class demo 1.不能new這個類,只能靠...