一、建立對象python
''' 在類的內部,使用 def 關鍵字來定義一個方法,與通常函數定義不一樣, 類方法必須包含參數 self, 且爲第一個參數,self 表明的是類的實例。 ''' #!/usr/bin/python3 #類定義 class People: #定義基本屬性 name = '' age = 0 #定義私有屬性,私有屬性在類外部沒法直接進行訪問 __weight = 0 #定義構造方法 def __init__(self,name,age,weight): self.name = name self.age = age self.__weight = weight #定義普通方法 def speak(self): print("name=%s, age=%d" %(self.name, self.age)) def __str__(self): return "name=%s, age=%d" %(self.name, self.age) # 實例化類 p = People('tom', 10, 30) p.speak() print("name=%s, age=%d" %(p.name, p.age)) print("*" * 10) print(p)
二、__del__方法函數
import sys class MyClass: def __del__(self): print("執行__del__方法。。。") # 實例化類 x1 = MyClass() x2 = x1 # 查詢對象的引用個數 print("引用個數:", sys.getrefcount(x1)) print("引用個數:", sys.getrefcount(x2)) del x1 print("*" * 20) del x2 #對象的引用計數爲0時調用__del__方法 print("*" * 20)
三、類屬性和實例屬性spa
#類定義 class People: #定義基本屬性 name = '' age = 0 #定義私有屬性,私有屬性在類外部沒法直接進行訪問 __weight = 0 #定義構造方法 def __init__(self,name,age,weight): self.name = name self.age = age self.__weight = weight #定義普通方法 def speak(self): print("name=%s, age=%d" %(self.name, self.age)) def __str__(self): return "name=%s, age=%d" %(self.name, self.age) # 實例化類, 並訪問實例屬性的值 p = People('tom', 10, 30) p.speak() print("name=%s, age=%d" %(p.name, p.age)) print("*" * 10) print(p) # 訪問類屬性的值 print("name=%s, age=%d" %(People.name, People.age))
四、類方法、實例方法、靜態方法code
class People: #定義基本屬性 name = '' def __init__(self, name): self.name = name #實例方法 def printName(self): print(self.name) #類方法 @classmethod def setName(cls, name): cls.name = name #靜態方法 @staticmethod def sayHi(): print("hello world") People.setName("tom") print(People.name) People.sayHi() print("*" * 20) # 類方法與靜態方法也能夠經過對象類調用 p = People("jack") p.printName() p.setName("haha") print(People.name) p.sayHi()
五、__new__方法對象
class People(object): name = "" def __init__(self, name): self.name = name print("init...") def __del__(self): print("del...") def __new__(cls, name): print("new...") return object.__new__(cls) p = People("tom") print(p.name)
六、單例blog
class People(object): __instance = None def __new__(cls): if cls.__instance == None: cls.__instance = object.__new__(cls) return cls.__instance p1 = People() print(id(p1)) p2 = People() print(id(p2))
__init__方法調用了屢次get
class People(object): __instance = None def __new__(cls, name): if cls.__instance == None: cls.__instance = object.__new__(cls) return cls.__instance def __init__(self, name): self.name = name p1 = People("tom") print(id(p1)) print(p1.name) #tom p2 = People("jack") print(id(p2)) print(p2.name) #jack
只初始化一次it
class People(object): __instance = None __flag = False def __new__(cls, name): if cls.__instance == None: cls.__instance = object.__new__(cls) return cls.__instance def __init__(self, name): if People.__flag == False: self.name = name People.__flag = True p1 = People("tom") print(id(p1)) print(p1.name) p2 = People("jack") print(id(p2)) print(p2.name)