Python3 關(guān)于類的學(xué)習(xí)

#!/usr/bin/python3

import _thread

import time

##class Dog():

##????????def __init__(self,name,age):

##????????????????self.name = name

##????????????????self.age = age

##????????def sit(self):

##????????????????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 )

##

### 為線程定義一個(gè)函數(shù)

##def print_time( threadName, delay):

##???count = 0

##???while count < 20:

##??????time.sleep(delay)

##??????count += 1

##??????print ("%s: %s\r\n" % ( threadName, time.ctime(time.time()) ))

##

### 創(chuàng)建兩個(gè)線程

##try:

##???_thread.start_new_thread( print_time, ("Thread-1", 2, ) )

##???_thread.start_new_thread( print_time, ("Thread-2", 2, ) )

##except:

##???print ("Error: 無(wú)法啟動(dòng)線程")

##

##while 1:

##???pass

##2018年10月5日13:44:32

#2018年10月5日13:44:32

"""Python關(guān)于類(Class)的學(xué)習(xí)"""

class Dog():

????"""一次模擬小狗的簡(jiǎn)單嘗試"""

????def __init__(self,name,age):

????????self.name = name

????????self.age = age

????def sit(self):

????????"""模擬小狗被命令時(shí)蹲下"""

????????print(self.name.title() + " is now sitting.")

????def roll_over(self):

????????"""模擬小狗被命令時(shí)打滾"""

????????print(self.name.title() + " rolled over!")


"""根據(jù)類創(chuàng)建實(shí)例并訪問(wèn)類的屬性"""

my_dog = Dog('willie',6)

print("My dog's name is " + my_dog.name.title() + ".")

print("My dog is " + str(my_dog.age) + " years old.")

"""調(diào)用方法"""

my_dog.sit()

my_dog.roll_over()

"""動(dòng)手試一試"""

class Restaurant():

????def __init__(self,restaurant_name,cuisine_type):

????????self.resname = restaurant_name

????????self.cuistype = cuisine_type

????def describe_restaurant(self):

????????print(self.resname + " is the restaurant name.")

????????print(self.cuistype + " is the restaurant cuisine_type")

????def open_restaurant(self):

????????print("The restaurant is open now")

myrestaurant = Restaurant("Spicy way","Chinese food")

myrestaurant.describe_restaurant()

myrestaurant.open_restaurant()

res1 = Restaurant("Zuoxiangyoulin","XiangCai")

res2 = Restaurant("Aiwanting","XiangCai")

res3 = Restaurant("Lanzhoufood","Lanzhou")

res1.describe_restaurant()

res2.describe_restaurant()

res3.describe_restaurant()

class User():

????def __init__(self,first_name,last_name,age,grade,professional):

????????self.first_name = first_name

????????self.last_name = last_name

????????self.age = age

????????self.grade = grade

????????self.professional = professional

????def describe_user(self):

????????print(self.first_name + " is My First_name.")

????????print(self.last_name + " is??My Last_nme.")

????????print("My age is " + self.age + ".")

????????print("My grade is " + self.grade + ".")

????????print(self.professional + " is my job.")

????def great_user(self):

????????print("Welcome, "+ self.first_name + self.last_name + " nice to meet you!")

stu1 = User("Pan","Yan","22","Male","Engineer")

stu1.describe_user()

stu1.great_user()

class Car():

????"""一次模擬汽車的簡(jiǎn)單嘗試"""

????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

????????##long_name = 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):

????????if miles >= 0:

????????????self.odometer_reading += miles

????????else:

????????????print("You can't set an miles with??negative increments")

????def fill_gas_tank(self,gallon):

????????print("The car have "+ str(gallon) + ' capacity')

##9.3.5 將實(shí)例用作屬性

class Battery():

????def __init__(self,battery_size=70):

????????self.battery_size = battery_size+10

????def describe_battery(self):

????????print("This car has a "+ str(self.battery_size) + "-kWh battery.")

class ElectricCar(Car):

????def __init__(self,make,model,year):

????????super().__init__(make,model,year)

????????self.battery = Battery()

##????def describe_battery(self):

##????????print("This car has a " + str(self.battery_size) + "-kWh battery.")

????def fill_gas_tank(self,gallon):

????????print("This car doesn't need a gas tank!")

my_tesla = ElectricCar('tesla','model s',2016)

print(my_tesla.get_descriptive_name())

my_tesla.battery.describe_battery()

my_tesla.fill_gas_tank(20)

my_new_car = Car('andi','a4',2016)

print(my_new_car.get_descriptive_name())

my_new_car.read_odometer()

my_new_car.odometer_reading = 23

my_new_car.read_odometer()

my_new_car.updata_odometer(10)

my_new_car.read_odometer()

my_new_car.increment_odometer(100)

my_new_car.read_odometer()

創(chuàng)建和使用類

? ? ? ? ? ??class Dog():

###class?? ??? ?關(guān)鍵字

###Dog()ClassName一般首字母大寫

? ? ? ? ? ? ? ? ? ?方法 __init__()

exp: __init__(self,name,age):

### __init__()稱為方法,我們將方法__init__() 定義成了包含三個(gè)形參:self 、name 和age 。在這個(gè)方法的定義中,形參self 必不可少,還必須位于其他形參的前面。為何必須在方法定義中包含形參self 呢?因?yàn)镻ython調(diào)用這個(gè)__init__() 方法來(lái)創(chuàng)建Dog 實(shí)例時(shí),將自動(dòng)傳入實(shí)參self 。每個(gè)與類相關(guān)聯(lián)的方法調(diào)用都自動(dòng)傳遞實(shí)參self ,它是一個(gè)指向?qū)嵗旧淼囊?,讓?shí)例能夠訪問(wèn)類中的屬性和方法。我們創(chuàng)建Dog 實(shí)例時(shí),Python將調(diào)用Dog 類的方法__init__() 。我們將通過(guò)實(shí)參向Dog() 傳遞名字和年齡;self 會(huì)自動(dòng)傳遞,因此我們不需要傳遞它。每當(dāng)我們根據(jù)Dog 類創(chuàng)建實(shí)例時(shí),都只需給最后兩個(gè)形參(name 和age )提供值。

self.name = name

self.age = age

###以self為前綴的變量都可供類中的所有方法使用,我們還可以通過(guò)類的任何實(shí)例來(lái)訪問(wèn)這些變量。可通過(guò)實(shí)例訪問(wèn)到的變量稱為屬性。

my_dog = Dog('Hole',6)

my_dog.name###要訪問(wèn)實(shí)例的屬性,可以使用句點(diǎn)表示法。

調(diào)用方法

my_dog.sit()

my_dog.roll_over()###實(shí)例名稱+'.'+方法。

在class Car里面,我們給類中的每個(gè)屬性制定初始值,

修改屬性的值

1.直接修改屬性的值。

2.通過(guò)方法修改屬性的值

繼承

??class Car():

class ElectricCar(Car):

? ? def __init__(self,make,model,year):

? ? ? ? ?super().__init__(make,model,year)

父類必須位于子類的前面,定義子類時(shí),必須在括號(hào)內(nèi)指定父類名稱。

使用super()函數(shù)將父類和子類關(guān)聯(lián)起來(lái),

當(dāng)子類有某個(gè)屬性與父類不一致時(shí),譬如小汽車和電動(dòng)汽車,電動(dòng)汽車沒(méi)有油箱,我們可以通過(guò)重寫父類的方法,給子類寫一個(gè)和父類重名的方法。使子類的該屬性值不沖父類處繼承。

將實(shí)例用作屬性

?使用代碼模擬實(shí)物時(shí),屬性和方法的文件都越來(lái)越長(zhǎng),可以將類的一部分作為一個(gè)獨(dú)立的類提取出來(lái)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 9.類 基本概念———初探類與對(duì)象 “什么是人類”、“什么是狗”、“汽車又是什么”……面對(duì)這些問(wèn)題,我們大多數(shù)人會(huì)...
    TianAff閱讀 727評(píng)論 1 5
  • emmm,這部分學(xué)的很累,也花了很長(zhǎng)時(shí)間,但是工欲善其事必先利其器,基礎(chǔ)是必不可少的。Python的語(yǔ)法相對(duì)來(lái)說(shuō)比...
    馬小野閱讀 5,387評(píng)論 0 37
  • 一、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 6,031評(píng)論 2 16
  • 8月22日-----字符串相關(guān) 2-3 個(gè)性化消息: 將用戶的姓名存到一個(gè)變量中,并向該用戶顯示一條消息。顯示的消...
    future_d180閱讀 1,032評(píng)論 0 1
  • 鹿小姐是我很好的朋友,她總說(shuō)她將來(lái)要生個(gè)女兒名字就叫做念初,然后再傻樂(lè)著念叨,多好的名字。聽(tīng)了太多遍關(guān)于他...
    溫大米閱讀 301評(píng)論 0 0

友情鏈接更多精彩內(nèi)容