1.類:抽象的,包括屬性和方法,比如矩形類,屬性可以是長寬,方法(也就是函數)可以是計算面積周長。
2.按照以下提示嘗試定義一個Person類并生成執行個體對象。
屬性:姓名(預設姓名為“小甲魚”)
方法:列印姓名
提示:方法中對屬性的引用形式需加上self,如self.name
class Person:
name = '小甲魚'#屬性
def printt(self):#方法
print(self.name)#方法中對屬性的引用
a = Person()
a.printt()
3.按照以下提示嘗試定義一個矩形類并生成類執行個體對象。
屬性:長和寬
方法:設定長和寬 -> setRect(self),獲得長和寬 -> getRect(self),獲得面積 -> getArea(self)
提示:方法中對屬性的引用形式需加上self,如self.width
class juxing:
chang = 4
kuan = 2
def setRect(self):
self.chang = int(input('請輸入長:'))
self.kuan = int(input('請輸入寬:'))
def getRect(self):
print('矩形的長為:%d,寬為:%d'%(self.chang,self.kuan))
def getArea(self):
s = self.chang * self.kuan
print('矩形的面積為:',s)
m = juxing()
m.setRect()
m.getArea()
m.getRect()
4.self參數的作用:self指向的是類的執行個體化對象,使得程式能夠判斷是哪個對象在調用方法。
5.不希望對象的屬性和方法被外部直接引用時,可以在名字前加入雙下劃線,例如:__name。
6.__init __方法會在類執行個體化時被自動調用,相當于對對象的初始化,是一種魔法方法,可重寫,不應該傳回除了none以外的任何對象。
7.明确類,類對象,類的執行個體化對象
在建立類時就生成了一個類對象,此對象可以調用類的屬性,不可以直接調用類的方法,執行個體化對象才可以調用方法。
8.按照以下要求定義一個遊樂園門票的類,并嘗試計算2個成人+1個小孩平日票價。
平日票價100元
周末票價為平日的120%
兒童半票
class Ticket:
def __init__(self, weekend=False, child=False):#初始化設定
self.price = 100
self.increase = 1
self.discount = 1
if weekend:
self.increase = 1.2
if child:
self.discount = 0.5
def Price(self, num):
return self.price * self.increase * self.discount * num
adult = Ticket()
child = Ticket(child=True)
print("2個大人 + 1個小孩平日票價為:%.2f元" % (adult.Price(2) + child.Price(1)))
9.super()函數:
在類的繼承中,如果重新定義了某個方法,則這個方法将會覆寫父類的同名方法,當想同時實作子類和父類的這一方法時,可以使用兩種方法,一個是:直接調用未綁定的父類方法;一個是:使用super()函數。
調用未綁定的父類方法,但是在多重繼承中會出現問題。
class B:
def ss(self):
pass
class A(B):
def ss(self):
B.ss(self) #調用父類方法
pass
使用super()函數,常用于多重繼承。
class B:
def ss(self):
pass
class A(B):
def ss(self):
super(A,self).ss() #先找到類A的父類B,然後将類A的對象轉化為類B的對象,最後調用ss方法。
#也可以直接super().ss()#python3寫法
pass
一般,super()函數最常見的方法就是在子類中調用父類的初始化方法。
class B:
def __init__(self, a, b):
self.a = a
self.b = b
class A(B):
def __init__(self, a, b, c):
super().__init__(a, b)
self.c = c
10.多态,一個事物的多種狀态,在python中讓具有不同功能的函數使用相同的函數名,進而可以用一個函數名調用不同功能的函數。
11.定義一個點(Point)類和直線(Line)類,使用getLen方法可以獲得直線的長度。
提示:
1.設點A(X1,Y1)、B(X2,Y2)
2.Python中計算開根号可使用math子產品中的sqrt函數
3.直線需有兩點構成,是以初始化時需要有兩個點(Point)對象作為參數
import math as m
class point():
def __init__(self, x, y):#設定x,y
self.x = x
self.y = y
def getx(self):#獲得x,y
return self.x
def gety(self):
return self.y
class line():
def __init__(self,p1,p2):
self.x = p1.getx()-p2.getx()
self.y = p1.gety()-p2.gety()
def getLen(self):
self.len = m.sqrt(self.x**2+ self.y**2)
print('%.2f'%self.len)
p1 = point(3, 1)
p2 = point(1, 4)
line = line(p1, p2)
line.getLen()
11.組合:在類定義中直接把需要的類放進去執行個體化。
class Turtle:
pass
class Fish:
pass
class Pool:
def __init__(self, x, y):
self.turtle = Turtle(x) # 直接把需要的類放進去執行個體化
self.fish = Fish(y)
12.請動手在一個類中定義一個變量,用于跟蹤類有多少個執行個體被建立(當執行個體化一個對象,這個變量+1,當銷毀一個對象,這個變量自動-1)。
類屬性通常用來跟蹤與類相關的值。
class C:
count = 0#類屬性
def __init__(self):#自動調用進行初始化
C.count += 1
def __del__(self):
C.count -= 1