簡(jiǎn)介
根據(jù)操作數(shù)據(jù)的函數(shù)或語句塊來設(shè)計(jì)程序,被稱為面向過程的編程。
把數(shù)據(jù)和功能結(jié)合起來,用稱為對(duì)象的東西包裹起來組織程序的方法稱為面向?qū)ο蟮?/strong>編程。
類和對(duì)象是面向?qū)ο缶幊痰膬蓚€(gè)主要方面。類創(chuàng)建一個(gè)新類型,而對(duì)象是這個(gè)類的實(shí)例 。
屬于一個(gè)對(duì)象或類的變量被稱為域。對(duì)象也可以使用屬于類的函數(shù)來具有功能。這樣的函數(shù)被稱為類的方法。域和方法可以合稱為類的屬性。
類使用class關(guān)鍵字創(chuàng)建。類的域和方法被列在一個(gè)縮進(jìn)塊中。
self
類的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱,但是在調(diào)用這個(gè)方法的時(shí)候Python會(huì)提供這個(gè)值。這個(gè)特別的變量指對(duì)象本身,名稱是self。
class Person:
def __init__(self,name):
self.name = name
print('my name is ', 'self.name')
def saySth(self):
print('hello')
p = Person('edwin')
p.saySth()
# 結(jié)果
my name is edwin
hello
saySth方法沒有任何參數(shù),但仍然在函數(shù)定義時(shí)有self。
__init__方法
在Python的類中有很多方法的名字有特殊的重要意義。__init__方法在類的一個(gè)對(duì)象被建立時(shí),馬上運(yùn)行。這個(gè)方法可以用來對(duì)你的對(duì)象做一些你希望的初始化。注意,這個(gè)名稱的開始和結(jié)尾都是雙下劃線。
上例中,我們沒有調(diào)用init方法,但其輸出中仍有 'name name is'。
區(qū)分類與對(duì)象的變量
類的變量和對(duì)象的變量只在這些類與對(duì)象的前提下有效。
class haveNum:
num = 0
def __init__(self,num):
self.num = num
num1 = haveNum(1)
num2 = haveNum(2)
# 結(jié)果
num1.num
Out: 1
num2.num
Out: 2
haveNum.num
Out: 0
繼承
面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實(shí)現(xiàn)這種重用的方法之一是通過繼承機(jī)制,通過繼承形成父類子類關(guān)系。
class Person:
"""Represents any school member"""
def __init__(self,name,age):
self.name = name
self.age = age
print(name,age)
def saySth(self):
print('person')
class Teacher(Person):
def __init__(self,name,age,salary):
Person.__init__(self,name,age)
self.salary = salary
print(name,age,salary)
class Student(Person):
def __init__(self,name,age,score):
Person.__init__(self,name,age)
self.score = score
print(name,age,score)
teacher = Teacher('MR',40,20000)
student = Student('edwin',20,90)
teacher.saySth()
student.saySth()
# 結(jié)果
MR 40
MR 40 20000
edwin 20
edwin 20 90
person
person
Python不會(huì)自動(dòng)調(diào)用基本類的constructor,你得親自專門調(diào)用它。