class a:
pass
print("列印類")
print(a)
print("列印類物件")
print(a())
print("類為自己增加屬性")
a.attr1 = 10
print("類拷貝給乙個變數")
b = a
print("判斷某個屬性是否為此類的")
print(hasattr(b,"attr1"))
print("類卓偉乙個引數傳入函式")
def printclass(a):
print(a)
printclass(a)
列印類
列印類物件
<__main__.a object at 0x000001eb361d0710>
類為自己增加屬性
類拷貝給乙個變數
判斷某個屬性是否為此類的
true
類卓偉乙個引數傳入函式
結論 : 類同樣也是⼀種物件 。
# class a:
# def __init__(self):
# self.__age = 10
# self.name = ""
# def getage(self):
# return self.__age
# @staticmethod
# def smethod():
# print("靜態方法")
# @classmethod
# def cmethod(cls):
# print("類方法")
def getage(self):
return self.__age
@staticmethod
def smethod():
print("靜態方法")
@classmethod
def cmethod(cls):
print("類方法")
a = type('a',(),)#等價於上面定義的類
a = a()
print(a.getage())
a.smethod()
a.cmethod()
10
靜態方法
類方法
a = 10
type(a )# int
a.__class__#int
a.__class__.__class__#type
type 就是 python的內建元類
每個類都有乙個__metaclass__屬性 不定義那麼就指向type,故我們要之定義元類就必須改變其指向,指向我們定義的元類函式,可以將通過這個元類建立的類的屬性全部變為大寫
def mytype(cls,classname, classfather, classattrfunc):#方法一無需傳入cls
newattrfunc = {}
for name, value in classattrfunc.items():#遍歷
if not name.startswith("__"):
newattrfunc[name.upper()] = value
# 建立方法1
return type(classname, classfather, newattrfunc)
# 建立方法2
return type.__new__(cls,classname, classfather, newattrfunc)
# 建立方法3
return super(mytype,cls).__new__.(classname, classfather, newattrfunc)
# super() 函式是用於呼叫父類(超類)的乙個方法。super 是用來解決多重繼承問題的
# python 3 可以使用直接使用 super().*** 代替 super(class, self).***
class a(object,metaclass=mytype):#python 3寫法
#__metaclass__ = mytype # 設定a類的元類為mytype python2寫法
attr = "hello"
a = a()
print(hasattr(a, "attr"))
print(hasattr(a, "attr"))
Python中type()詳解 動態建立類
眾所周知 type 函式可以檢視變數的型別 先看乙個簡單的列子來看一下type檢視變數型別 class animal pass a animal print type a print type animal 可以發現我定義的animal類本身的型別是 type 從 python 直譯器的角度來看,當...
Python中type()詳解 動態建立類
眾所周知 type 函式可以檢視變數的型別 先看乙個簡單的列子來看一下type檢視變數型別 class animal pass a animal print type a print type animal class main animal class type 可以發現我定義的animal類本身...
Type類方式建立例項,呼叫類方法
由於需要做自定義控制項 使其通用化 為滿足對自定義類呼叫以及自動根據類名稱建立例項,所以想到以這種方式實現.建立type類 通過定義好的字串型的類名稱 類名稱最好具體到命名空間,方法參考 type類獲取型別方法 通過字串型的類名 使用methodinfo類 獲取類中定義的方法 例 methodinf...