面向對象

類 : 是對一類事物抽象出來的特性的集合(屬性和方法)
製造月餅的模具
對象: 由類生成出的一系列實例
一個個真實的月餅
屬性和方法是一個整體,屬性就是變量,方法就是函數

示例:
class Dog:
def init(self,name,age,color):
self.name = name
self.age = age
self.color = color

    def eat(self):
        print('it is eating')

    def run(self):
        print('it is running')

jm = Dog('jm',1,'gloden')

sm = Dog('sm',2,'white')

jm.run()
sm.eat()
print(sm.name)

類 內置屬性
python基類的自帶的屬性,可以通過內置屬性獲得類本身相關的信息。
dict : 類的屬性(包含一個字典,由類的屬性組成,沒有實例屬性)
doc : 類的文檔字符串
name: 類名
module: 類定義所在的模塊
bases : 類的所有父類構成元素(所有父類組成的元組)

類 內置方法
使用def關鍵字可以爲類定義一個方法,與一般函數定義不同,類方法第一個參數爲self。
內置方法爲python基類中定義的方法,這些方法實現了特定的功能,可以在自定義類的重載方法。
init 構造函數,在生成對象時調用
del 析構函數,釋放對象時使用
repr 打印時進行轉換
str 轉化爲字符串,python3推薦
call 函數調用

示例:
class Dog:
‘’‘haha’’’
var = 100
def init(self,name,age,color):
print(‘start’)
self.name = name·
self.age = age
self.color = color
def str(self):
return ‘hello can you see me’
def call(self, *args, **kwargs):
return ‘call’

    def __del__(self):
        print('delete')

sm = Dog('sm',1,'white')
print(sm)
print(sm())

面向對象的三大特性是指:封裝、繼承和多態。
封裝: 屏蔽內部的複雜性,給用戶只提供一個接口,用戶不需要了解內部的實現
繼承: 一個類可以繼承其它類實現好的功能,在其它類的基礎上進一步豐富功能
class Dog:
def init(self,name,age,color):
self.name = name
self.age = age
self.color = color
def run(self):
print(‘running’)

        class XTQ(Dog):
            def __init__(self,*args):
                #Dog.__init__(self,*args)
                super().__init__(*args)

            def fly(self):
                print(' it can fly')

        sm = Dog('sm',1,'white')
        xtq = XTQ('xtq',1000,'black')
        xtq.fly()
多態 : 同一個操作,當對象不同時,行爲也不同

python通用的命名約定
文件名: 全小寫
變量名: 全小寫
常量: 全大寫 PI
類名: 採用大駝峯 MyClass
類中屬性:
name : 普通變量
name : 內置變量,一般有特殊含意,最好不要定義此類變量
__name : 私有變量,此變量不能被實例直接訪問(全靠自覺)
_name : 私有變量,不建議實例直接訪問

示例:
class Person:
def init(self,name,blood=100):
self.name = name
self.__blood = blood

    def hit(self,obj):
        print('{} hit {}'.format(self.name,obj.name))
        obj.sub()

    def sub(self,val = 10):
        self.__blood -= val

    def show_blood(self):
        print('{} blood is {}'.format(self.name,self.__blood))

p1 = Person('奧特曼')
p2 = Person('小怪獸')
p1.show_blood()
p2.show_blood()
p1.hit(p2)
p2._Person__blood = 1000
p1.show_blood()
p2.show_blood()

示例:
class Dog:
def init(self,name,age):
self.name = name
self.__age = age

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self,val):
        if val > 20 or val < 1:
            raise ValueError('age {} is invalid'.format(val))
        else:
            self.__age = val

sm = Dog('sm',2)
print(sm.age)
sm.age = 15
print(sm.age)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章