Python中類的使用

#-*- coding=utf-8 -*-
# 簡單的一個類實例
class Ta():
    var1 = 'demo'
    var2 = 'test'
    def fun():
        print('簡單測試類方法')
    
# 使用類的方法和屬性
print(Ta.var1)
Ta.fun()

# 在同一個類裏,方法如何調用類屬性
class Demo():
    var1 = '被調用'
    
    # 在這裏是有使用classmethod和cls才能調用類屬性,缺一不可,否則會報錯
    @classmethod
    def useAttributeInClass(cls):
        print(cls.var1)
        
    @classmethod
    def receivePatameters(cls, value):
        print('use value {} in the class'.format(cls.var1))
        print('received a parameter, it is {}'.format(value))
        
# 測試Demo類的方法
Demo.receivePatameters(123)

# 對於類屬性的修改
class ModifyValue():
    value = 0
    
    @classmethod
    def modifyvalue(cls):
        print('current value is {}'.format(cls.value))
        cls.value = input('enter your number:')
        print('after modifide value, it is {}'.format(cls.value))
        
# 測試是否可以修改
m = ModifyValue()
m.modifyvalue()

# 類的構造函數和析構函數
# __init__
# __del__
class TestDelAndInit(object):
    
    def __del__(self):
        print('destroy success')
    
    def __init__(self,str):
        print('with parameter {} init success'.format(str))
    
# 測試析構函數和構造函數
t1 = TestDelAndInit('hello')
del t1


# 類的繼承和多態
"""
1. 在定義類時,能夠在()裏寫上繼承的類名字,若是不須要繼承類的話最好寫上object
2. python支持多繼承
3. 若是父類中含有相同方法名,而且子類中沒有指定,則是按照從左到右的順序
4. 繼承的做用
    * 繼承父類的方法和屬性
    * 能夠覆蓋父類的屬性和方法
"""
class Shape(object):
    var =  object()
    
    "構造函數"
    def __init__(self,name):
        self.name = name
    
    "返回面積"
    def getArea(self):
        pass
        
    " 返回周長"
    def getC(self):
        pass
        
    "顯示對象的信息"
    def display(self):
        pass
        
    "一個默認函數,不作任何事"
    def doNothing(self):
        print('Shape do nothing with object {}'.format(self.var))
        
    "顯示當前是哪一個類"
    def OutInfo(self):
        print('Hello,this is shape called {}'.format(self.name))
        
class Rectangle(Shape):
    # 定義一個類成員
    var = 'rectangle'
    
    "構造函數"
    def __init__(self,width,height,name):
        # 父類構造函數的調用
        super(Rectangle,self).__init__(name)
        self.width = width 
        self.height = height
    
    "獲取Width"
    @property
    def getWidth(self):
        return self.width
        
    @property
    def getHeight(self):
        return self.height
    
    "重寫面積函數"
    def getArea(self):
        return self.width * self.height
        
    "重寫周長函數"
    def getC(self):
        return 2 * ( self.width + self.height)
        
    "在這裏重寫display必須加上self,否則在對象調用這個方法的時候會出現類型錯"
    def display(self):
        print('this is Rectangle')
        
    "使用類的成員變量"
    def showvar(cls):
        print('value of Rectangle is {}'.format(cls.var))
        
    "多態函數的實現"
    def OutInfo(self):
        print('Hello,this is a shape called {}'.format(self.name))
        
# 測試Rectangle的方法和屬性
r = Rectangle(12,19,'Rectangle')
print(type(r))

# 調用重載的方法
r.display()

# 調用父類的方法
r.doNothing()

# 調用計算面積函數
print('Area of r is {}'.format(r.getArea()))
r.showvar()
print('value of Rectangle is {}'.format(r.var))

"多態函數的實現"
def OutInfoOfShape(shape):
    shape.OutInfo()
    
# 測試多態函數是否成功
OutInfoOfShape(Shape('Basic'))
OutInfoOfShape(r)
   
相關文章
相關標籤/搜索