面物件編程:撰寫表現世界中的事物和景象的類,并基于這些類創建物件,被創建的物件稱為實體化,
創建類
class Dog(): #Python中類名稱中的首字母要大寫
def __init__(self, name, age):#我是一個構造器
#類中的函式都稱為【方法】,init__()是個特殊的方法,每當我們根據Dog類創建實體時,Python都會自動的運行它
#self必不可少且必須位于其它形參前面,
# 每個與類相關的方法呼叫都自動傳入self,self讓實體能夠訪問類中的屬性和方法
self.name = name#以【self】為前綴的變數,可供類中所有【方法】使用,也可通過【實體】訪問,我們稱其為【屬性】
self.age = age
def sit(self):
#self會自動傳遞name與age
print(self.name.title() + " is now sitting.")
def roll_over(self):
print((self.name.title() + " rolled over!"))
根據類創建實體
my_dog = Dog('willie',6) #根據類創建的實體名稱應用小寫
print("My dog's name is " + my_dog.name.title() + ".")#__init__并未顯式的包含return陳述句,但Python自動回傳了這條小狗的實體(name與age)
print("My dog is " + str(my_dog.age) + " years old.")
#print(my_dog.name + my_dog.age)呼叫屬性相加
my_dog.sit()#實體中呼叫方法,Python在類Dog中查找方法sit()并運行其代碼
my_dog.roll_over()
根據類創建多個實體
my_dog = Dog('willie', 6)
your_dog = Dog('lucy', 3)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")#實體my_dog的列印陳述句
print("You dog's name is " + your_dog.name.title() + ".")#實體your_dog的列印陳述句
print("You dog is " + str(your_dog.age) + " years old.")
屬性
類中的每個屬性都必須有初始值(可以是0和空字符)
class Dog():
def __init__(self, name, age):
self.name = name
self.age = age
self.day = 0#屬性day的默認值為0
def update_a(self, new):
'''修改屬性值的方法'''
self.day = new
'''禁止任何人把年齡往回呼'''
#if new >= self.day :
# self.day = new
#else :
#print("返老還童?")
'''對屬性值進行遞增'''
# self.day += new
my_dog = Dog('willie',6)
"""修改屬性值"""
my_dog.day = 18#通過實體直接修改
my_dog.update_a(18)#通過方法修改
繼承
一個類繼承另一個類時,它將自動獲得另一個類的所有屬性和方法,
創建子類時父類必須包含在當前檔案中,且位于子類之前,
可使用 super() 將父類與子類關聯起來
from car import Car
class ElectricCar(Car):#定義子類時必須在括號內指定父類名稱
def __init__(self, manufacturer, model, year):
super().__init__(manufacturer, model, year)#讓Pyton呼叫父類的方法__init__(),使ElecticCar包含父類的所有屬性
my_tesla = ElectricCar('teska', 'models', 2016)#使用子類創建實體
print(my_tesla.get_descriptive_name())
父類方法重寫(覆寫)
在子類中定義一個與父類方法同名的方法,則Python將不會考慮父類中的這個方法,而只關注子類中定義的相應方法
將類作為屬性的實體呼叫:
from car import Car
class Battery():
def __init__(self, battery_size=60):
self.battery_size = battery_size
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
def get_range(self):
if self.battery_size == 60:
range = 140
elif self.battery_size == 85:
range = 185
message = "This car can go approximately " + str(range)
message += " miles on a full charge."
print(message)
class ElectricCar(Car):
def __init__(self, manufacturer, model, year):
super().__init__(manufacturer, model, year)
self.battery = Battery()#將類用作屬性
my_tesla = ElectricCar('teska', 'models', 2016)
my_tesla.battery.describe_battery()#將類用作屬性的實體呼叫
匯入類模塊
從一個模塊中匯入多個類 from car import Car, ElecticCar
匯入整個模塊
因為要在類名前加上模塊名所以不會發生覆寫,所以需要從一個模塊匯入很多類時,最好匯入整個模塊使用,
import car
my_car = car.Car('audi', 'a4', 2015)#使用car模塊中的類創建實體,需要在類前加上模塊名
print(my_car.get_descriptive_name())
my_car = car.ElectricCar('tesla', 'roadster', '2016')
print(my_car.get_descriptive_name)
使用Python標準庫collections創建有序字典
from collections import OrderedDict
favorite_languages = OrderedDict()#構建物件
favorite_languages['jen'] = 'python'#為物件填入元素
favorite_languages['sarah'] = 'c'
favorite_languages['edward'] = 'ruby'
favorite_languages['phil'] = 'python'
for name, language in favorite_languages.items():
print(name.title() + "'s favorite language is " +
language.title() + ".")
from random import randint#一個很有意思的庫隨機生成數字
class Die():
'''一個會改變面的骰子'''
def __init__(self, sides=6):
'''控制面'''
self.sides = sides#sides
def roll_die(self):
'''轉骰子操作'''
for a in range(0,10):#控制回圈
x = randint(1, self.sides)
print(x)
a = Die()
a.roll_die()
b = Die()
b.sides = 10#改變骰子面數
b.roll_die()
作業流程:
開始時應該讓代碼結構盡可能簡單,盡可能在在一個檔案中完成所有作業,再將類移到獨立的模塊中,
每個模塊應包含一段描述,對于其中的類能做什么也應有所描述
在類中使用一個空行來分隔方法;在模塊中使用兩個空格來分隔類
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/190362.html
標籤:Python
上一篇:經典排序演算法詳細介紹
