python第九章 類

# 創建
class Dog():
    def __init__(self,n,a):
        self.name=n
        self.age=a
    def sit(self):
        print(self.name.upper()+' can sit!!!')
mydog=Dog('PI',22)
print('mydog has a name:'+mydog.name.title())
mydog.sit() #不需要參數 直接使用
#默認值
class cars():
    def __init__(self,brand,price):
        self.brand=brand
        self.price=price
        self.year=2019
    def car(self):
        print("The brand of my car:"+self.brand)
        print('It was bought in '+str(self.year)+' at '+str(self.price)+'0000')
        #注意後面所有函數對於參數的引用必須要用self.
mycar=cars('BMW',99)
mycar.car()
#直接修改屬性的值
mycar.year=2018
mycar.brand='BAOMA'
mycar.car()      
#通過方法修改屬性的值
class cars():
    def __init__(self,brand,price):
        self.brand=brand
        self.price=price
        self.year=2019
    def car(self):
        print("The brand of my car:"+self.brand)
        print('It was bought in '+str(self.year)+' at '+str(self.price)+'0000')
    def modify(self,ye):
        self.year=ye
mycar=cars('BWM',9999)
mycar.modify(2000) #可以修改默認值/非默認值的參數
mycar.car()
#modify函數也可以設置成帶有限制的
def modify(self,ye):
    if ye >= self.price:
        self.price=ye
    else:
        print('You cannot alter the price!')
#繼承
class cars():
    def __init__(self,brand,price):
        self.brand=brand
        self.price=price
        self.year=2019
    def car(self):
        print("The brand of my car:"+self.brand)
        print('It was bought in '+str(self.year)+' at '+str(self.price)+'0000 RMB')
class electric(cars):
    def __init__(self,bb,pp):
        super().__init__(bb,pp)
#與上一行的對應 當然和父類的可以不對應 但是數量一定一致
mytesla=electric('BBBBBB',6666)
mytesla.car()

#繼承父類以後可以定義新屬性,新方法
class electric(cars):
    def __init__(self,bb,pp):
        super().__init__(bb,pp)
#與上一行的對應 當然和父類的可以不對應 但是數量一定一致
        self.quality='Amazing!!!!!'
    def newcar(self):
        print("my electric car is so "+self.quality)
mytesla=electric('BBBBBB',6666)
mytesla.newcar() 
#如果子類重寫父類中的方法,那麼按照重寫的來

#將實例作爲屬性(類中類)
#父類
class cars():
    def __init__(self,brand,price):
        self.brand=brand
        self.price=price
        self.year=2019
    def car(self):
        print("The brand of my car:"+self.brand)
        print('It was bought in '+str(self.year)+' at '+str(self.price)+'0000 RMB')
#後期引用的類
class battery():
    def __init__(self,battery_size=80):
        self.battery_size=battery_size
    def describe_battery(self):
        print("The car has a "+str(self.battery_size)+" -kwh battery.")
#子類
class electric(cars):
    def __init__(self,bb,pp):
        super().__init__(bb,pp)
        self.battery=battery()
#實例
my_tesla=electric('qqq',8888)
my_tesla.battery.describe_battery() 
#被引用的類中可以與其他的函數來進行更復雜的操作

#導入另一個.py文件(模塊)的類 目的是爲了主程序的簡潔
from im import cars
my_new_car=cars('haha',2999999)
my_new_car.car()
#類似於導入函數
#導入某些類
from im import cars,electric
my_new_car=cars('haha',2999999)
my_new_car.car()
#導入整個模塊
import im
my_car=im.cars('BMW',99999)
my_car.car()
#導入全部類
from im import  *
#最推薦的import name 這種方法 類的來源很明確

#模塊中的模塊
#一個模塊中的類的使用依賴於其他模塊的類
#car1.py
class car():
    --snip--
#car2.py 
from car1 import car
class electric(car):
    --snip--
#即在car2中類car是從car1中拿過來的 不拿就出錯

from car1 import car
from car2 import electric
#第三個模塊需要使用上面的兩個類

#python標準庫作爲一種模塊 其中包含一些類
#OrderedDict可以記錄鍵值的配對順序
from collections import OrderedDict

favorite_languages =OrderedDict()

favorite_languages['Jerry']='C++'
favorite_languages['Mory']='python'
favorite_languages['Tom']='ruby'

for name,language in favorite_languages.items():
    print(language.title()+" is "+name.title()+"'s "+"favorite language.")

#導入random.py裏面的函數randint,自動生成隨機數
from random import randint
x=randint(1,8)
print(x)
#練習:根據篩子面數 利用上述函數和類生成隨機數
class Die():
    def __init__(self,sides=6):
        self.sides=sides
    def roll_die(self):
        return randint(1,self.sides)
random1=Die()
for i in range(10):
    print(random1.roll_die())
random2=Die(10)
for i in range(10):
    print(random2.roll_die())
random3=Die(20)
for i in range(10):
    print(random3.roll_die())
#python標準庫:https://pymotw.com/3/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章