python基礎--面向對象

 一、建立對象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)
相關文章
相關標籤/搜索