#!/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)。