#!/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 )
##
### 為線程定義一個函數
##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)建兩個線程
##try:
##???_thread.start_new_thread( print_time, ("Thread-1", 2, ) )
##???_thread.start_new_thread( print_time, ("Thread-2", 2, ) )
##except:
##???print ("Error: 無法啟動線程")
##
##while 1:
##???pass
##2018年10月5日13:44:32
#2018年10月5日13:44:32
"""Python關于類(Class)的學習"""
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!")
"""根據類創(chuàng)建實例并訪問類的屬性"""
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.")
"""調用方法"""
my_dog.sit()
my_dog.roll_over()
"""動手試一試"""
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():
????"""一次模擬汽車的簡單嘗試"""
????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 將實例用作屬性
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?? ??? ?關鍵字
###Dog()ClassName一般首字母大寫
? ? ? ? ? ? ? ? ? ?方法 __init__()
exp: __init__(self,name,age):
### __init__()稱為方法,我們將方法__init__() 定義成了包含三個形參:self 签餐、name 和age 寓涨。在這個方法的定義中,形參self 必不可少氯檐,還必須位于其他形參的前面戒良。為何必須在方法定義中包含形參self 呢?因為Python調用這個__init__() 方法來創(chuàng)建Dog 實例時冠摄,將自動傳入實參self 糯崎。每個與類相關聯的方法調用都自動傳遞實參self ,它是一個指向實例本身的引用河泳,讓實例能夠訪問類中的屬性和方法沃呢。我們創(chuàng)建Dog 實例時,Python將調用Dog 類的方法__init__() 拆挥。我們將通過實參向Dog() 傳遞名字和年齡薄霜;self 會自動傳遞,因此我們不需要傳遞它。每當我們根據Dog 類創(chuàng)建實例時惰瓜,都只需給最后兩個形參(name 和age )提供值否副。
self.name = name
self.age = age
###以self為前綴的變量都可供類中的所有方法使用,我們還可以通過類的任何實例來訪問這些變量⊥沂欤可通過實例訪問到的變量稱為屬性副编。
my_dog = Dog('Hole',6)
my_dog.name###要訪問實例的屬性,可以使用句點表示法负甸。
調用方法
my_dog.sit()
my_dog.roll_over()###實例名稱+'.'+方法流强。
在class Car里面,我們給類中的每個屬性制定初始值,
修改屬性的值
1.直接修改屬性的值。
2.通過方法修改屬性的值
繼承
??class Car():
class ElectricCar(Car):
? ? def __init__(self,make,model,year):
? ? ? ? ?super().__init__(make,model,year)
父類必須位于子類的前面,定義子類時,必須在括號內指定父類名稱呻待。
使用super()函數將父類和子類關聯起來,
當子類有某個屬性與父類不一致時,譬如小汽車和電動汽車,電動汽車沒有油箱,我們可以通過重寫父類的方法打月,給子類寫一個和父類重名的方法。使子類的該屬性值不沖父類處繼承蚕捉。
將實例用作屬性
?使用代碼模擬實物時,屬性和方法的文件都越來越長,可以將類的一部分作為一個獨立的類提取出來奏篙。