笨辦法學python3日常問題解決
1)類:用來描述具體相同的屬性和方法的物件的集合 2)物件:通過類定義的資料結構例項 3)類設計的要點:名稱、屬性(特徵)、方法(行為,也就是函式) #其中的方法__init__(self,name,age) 是固定寫法 class Cat(): """模擬小貓的類""" def __init__(self,name,age): """初始化屬性name和age""" self.name = name self.age = age def eat(self): """小貓會吃飯""" print(self.name.title() + ' is now eating.') def sleep(self): """小貓會睡覺""" print(self.name.title() + ' is now sleeping.') #eat(),sleep(self) 為類的方法,只要例項化類例項,即可隨意呼叫 2.建立一個物件並賦值的方法(建立類例項) 物件名 = 類() MIAOMIAO = CAT() 3.通過物件調閱類中的方法(即函式) 物件名.方法() MIAOMIAO.eat() MIAOMIAO.drink() 4.給物件新增屬性 物件名.新的屬性名 = 值 MIAOMIAO.weight = 25 5.獲取物件的屬性 1)物件.屬性 print(MIAOMIAO.weight) 2)在類中新定義一個方法,在方法中使用self.屬性 def Info(self): print(self.weight) 6.__init__()的方法 1)是Python自動呼叫的方法,呼叫時間為:建立完物件之後立馬呼叫 2)不需要開發者呼叫 3)這個方法會完成一些預設的事情,比如新增一些屬性 4)class XXXXX: def __init__(self, new_a, new_b): self.a = new_a self.b = new_b
動態修改物件屬性值
直接訪問屬性賦值
my_cat.color = 'red'
print(my_cat.color)#結果為 red
封裝方法進行動態呼叫賦值,這種方法其實就類比 java 中的 set 方法。
my_cat.setColor('black')
print(my_cat.color)#結果為 black
繼承,面相物件三大特性之一 前面說到,類實可以用來描述一類事物的,而為了達到程式碼的複用性,面相物件提供了繼承的概念,即可以通過繼承的方式獲取已存在類的屬性及方法。被繼承方稱為父類,繼承方稱為子類。 定義 Car 父類:
class Car(): """汽車類""" def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odometer_reading = 0 def get_descriptive_name(self): long_name = str(self.year) + ' ' + self.make + ' ' +self.model return long_name.title() def read_odometer(self): print('This car has ' + str(self.odometer_reading) + ' miles on it.') def updata_odometer(self,mileage): """動態處理屬性值""" if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print('You can\'t roll back an odometer!') def increment_odometer(self,miles): """屬性值遞增""" self.odometer_reading += miles
子類:
class ElectricCar(Car):
"""電動汽車"""
def __init__(self,make,model,year):
"""初始化父類屬性"""
super().__init__(make,model,year)
my_tesla = ElectricCar('tesla','model s',2017)
print(my_tesla.get_descriptive_name())
結果:2017 Tesla Model S
簡析:ElectricCar 累擁有 Car 類的所有屬性及方法,在_init_()
中呼叫父類 _init_
方法初始化父類屬性,其中super為父類物件,可以使用它訪問父類的方法及屬性。
定義子類獨有的屬性及方法 一類事物公有的屬性及方法可以封裝在父類,以達到複用的效果。除了可以從父類繼承公有屬性及方法之外,子類還可以定義自己獨有的屬性及方法。
def __init__(self,make,model,year):
"""初始化父類屬性"""
super().__init__(make,model,year)
self.battery_size = 70
def describe_battery(self):
"""子類特有的方法"""
print('This car has a' + str(self.battery_size) + '-kwh battery.')
my_tesla = ElectricCar(‘tesla’,‘model s’,2017) print(my_tesla.describe_battery()) 結果:This car has a 70-kwh battery.
重寫父類的方法 有時候父類定義的方法往往不符合子類現有的需求,可以對它進行重寫,執行子類特有的邏輯。注意:只要重寫了父類的方法,此時呼叫方法以子類實現為主
def get_descriptive_name(self): print(‘重寫了父類的方法’) print(my_tesla.get_descriptive_name()) 結果肯定是列印 重寫了父類的方法
匯入類 oop 程式設計中,每個類都有自己特有的功能,當整個專案也來越複雜的時候,就需要每個類之間相互依賴,正常情況下,都是一個 python 檔案儲存一個類,當需要依賴別的類時,需要匯入。使用格式 from 檔名 import 類名…,當然了 也可以一個檔案儲存多個類。 例如:在 car.py 中新增 Car 類
class Car(): “”“汽車類”""
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' +self.model
return long_name.title()
def read_odometer(self):
print('This car has ' + str(self.odometer_reading) + ' miles on it.')
def updata_odometer(self,mileage):
"""動態處理屬性值"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print('You can\'t roll back an odometer!')
def increment_odometer(self,miles):
"""屬性值遞增"""
self.odometer_reading += miles
在 electricCar.py 中新增 ElectricCar 類繼承自 Car ,
from car import Car
class ElectricCar(Car):
"""電動汽車"""
def __init__(self,make,model,year):
"""初始化父類屬性"""
super().__init__(make,model,year)
self.battery_size = 70
def describe_battery(self):
"""子類特有的方法"""
print('This car has a ' + str(self.battery_size) + '-kwh battery.')
def get_descriptive_name(self):
print('重寫了父類的方法')