python面向对象编程138讲_Python面向对象编程简单讲解
學習目標:
1-面向對象編程
2-類和對象
3-對象的屬性和方法
4-類的特性
Python面向對象編程
一種編程程序的設計思想,把對象作為程序的基本單元,一個對象包含了數據和操作數據的函數。把計算機程序視為一組對象的集合,而每個對象都可以接收其他對象發過來的消息,并處理這些消息,計算機程序的執行就是一系列消息在各個對象之間傳遞。
在Python中,所有數據類型都可以視為對象,也可以自定義對象。自定義的對象數據類型就是面向對象中的類(class)概念。
面向對象的設計思想是抽象出Class(類)和instance(實例),面向對象的抽象程度比函數高,一個類即包含數據又包含操作數據的方法。
類和對象
面向對象編程的兩個非常重要的概念:類和對象
對象是面向對象編程的核心,在使用對象的過程中,為了將具有共同特征和行為的一組的景象定義,提出了另外一個新的概念——類
類
具有相似內部狀態和運動規律的實體的集合。具有相同發生和行為事物的統稱,類是抽象的,在使用的時候通常會找到這個類的一個具體的存在,使用這個具體的存在。一個類可以找到多個對象。
對象
某一個具體事物的存在,在現實世界中可以是看得風措得著的,可以是直接使用的。
類與對象之間的關系:類就是創建對象的模板
定義類和創建對象
定義一個類和創建對象,格式如下:
#創建類——經典方法
class 類名: #class-關鍵字,類名的命名使用大駝峰命名法,即首字母大寫
#如下:
class Hero:
#創建類——新方法
class Hero(object):#object是python里所有類的最頂級父類
#函數,在類中叫做方法
#創建方法
def info(self):#info是一個實例方法,第一個參數一般是self:表示實例對象本身。
print("這是面向對象hero")
#創建對象
對象名1 = 類名()
對象名2 = 類名()
對象名3 = 類名()
對象名(不必遵循大駝峰命名法) = 類名()
my_hero = Hero()
#對象的使用方法,對象名.(點語法)方法名
my_hero.info()
#輸出結果:
這是面向對象hero
#再創建一個對象
my_hero2 = Hero()
print(my_hero)
print(my_hero2)
#輸出結果:
<__main__.hero object at>#地址:在存儲機制中
<__main__.hero object at>#地址
對象的屬性和方法
獲取和添加對象的屬性
class teacher(object):
def show(self):
print("今天北京下雪了")
#創建對象
teacher_zhang = teacher()
#添加屬性、特點、特征
teacher_zhang.name = "張三"
teacher_zhang.age = 20
teacher_zhang.sex = "男"
#獲取屬性,通過點語法
print(teacher_zhang.name)
輸出結果:張三
#修改屬性
teacher_zhang.age = 30
print(teacher_zhang.age)
輸出結果:30
init 魔法函數:用來做屬性的初始化
class teacher(object):
def __init__(self):
print("這是init方法")
def showName(self):
print("我的名字")
zhangsan = teacher()
zhangsan.showName()
#輸出結果
這是init方法
我的名字
#__init__()方法,在創建一個對象時自動被調用,不需要手動調用
即:
class teacher(object):
def __init__(self):
print("這是init方法")
def showName(self):
print("我的名字")
zhangsan = teacher()
#輸出結果:
這是init方法
#有參數的init方法
class teacher(object):
def __init__(self,name,age):
print("這是init方法")
self.name = name
self.age = age
print(name,age)
def showName(self):
print("我的名字")
zhangsan = teacher("張三",20)
#輸出結果
張三 20
類的特性:封裝、繼承、多態
繼承:多個類之間的所屬關系
class Father(object):
def __init__(self,name):
self.name = name
print("我叫%s"%self.name)
def info(self):
print("我來自")
class Son(object):
def show(self):
print("展現我自己")
guoQilin = Son()
guoQilin.show()
#輸出結果:展示我自己
單繼承:Son類繼承于Father
class Father(object):#父類:基類
def __init__(self,name):
self.name = name
self.family = "郭氏"
print("我叫%s"%self.name)
def info(self):
print("我來自%s家族"%self.family)
class Son(Father):#子類,通過繼承,可以使用父類中的方法
def show(self):
print("展現我自己")
def info(self):
print("我是德云社新一代,個性就是要與眾不同")
guoQilin = Son("郭麒麟") #”郭麒麟“是屬性,guoQilin是一個對象
guoQilin.show()
guoQilin.info()
#輸出結果
我叫郭麒麟
展現我自己
我是德云社新一代,個性就是要與眾不同
子類在繼承的時候,子類定義小括號中父類的名字;父類中的屬性與方法都會傳給子類;雖然子類沒有定義init方法,但是父類有,子類應付使用父類的方法。
多繼承:
#多繼承
class Father(object):
def __init__(self,name):
self.name = name
self.family = "郭氏"
print("我叫%s"%self.name)
def info(self):
print("我來自%s家族"%self.family)
class ShiFu(object):
def __init__(self):
self.teacher = "于氏門生"
def speak(self):
print("我要說相聲")
class Son(Father,ShiFu):
def show(self):
print("展現我自己")
def info(self):
print("我是德云社新一代,個性就是要與眾不同")
guoQilin = Son("郭麒麟") #”郭麒麟“是屬性,guoQilin是一個對象
guoQilin.show()
guoQilin.info()
guoQilin.speak()
#輸出結果
我叫郭麒麟
展現我自己
我是德云社新一代,個性就是要與眾不同
我要說相聲
#魔法屬性,可以查看繼承順序,子類,父類,師父類
print(Son.__mro__)
#輸出結果
(, , , )
重寫父類方法
子類繼承父類,父類的方法滿足不了子類的需要可以對父類的方法進行重寫;重寫的特點:繼承關系,方法名相同
屬性方法
類屬性與實例屬性
類屬性就是類對象所擁有的屬性,這被所有類對象的實例對象所共有,在內存中只存在一個副本。
#類屬性
class People(object): #創建一個類
ame = "tom" #公有的類屬性
__age = 12 #私有的類屬性
p = People() #創建一個對象
#類的共有屬性,實例(對象)與類都可以調用
print(p.name)
print(People.name)
#輸出結果:
tom
tom
#私有的類屬性,只能在類里面調用
print(p._age)
print(People._age)
#實例屬性
class People(object):
ame = "tom"
#類屬性,直接在類里面寫的
def __init__(self):#self會將其下的屬性指給對象
self.name = "xiaowang" #實例屬性
self.age = 20
p = People()
p.age = 12
print(p.name)
print(p.age)
#輸出結果
xiaowang
12
可以用實例屬性改掉類屬性
靜態方法和類方法
類方法是類對象所擁有的方法,第一個參數必須是類對象,一般以cls作為第一個參數,能夠通過實例對象和類對象去訪問。類方法用@classmethod修飾。
靜態方法用@staticmethod修飾,不能傳入self,是獨立的單純的函數 。
#魔法屬性,可以查看繼承順序,子類,父類,師父類
print(Son.__mro__)
#輸出結果
(, , , )
總結
以上是生活随笔為你收集整理的python面向对象编程138讲_Python面向对象编程简单讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hadoop源码分析_Spark2.x精
- 下一篇: pycharm和python在mac里安