1. 程式人生 > >笨辦法學python3日常問題解決

笨辦法學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('重寫了父類的方法')