天天看点

Python编程入门到实践 - 笔记( 9 章)

<b>第 9 章主要讲的类,这个之前在 shell 中没遇到过</b>

<b>一直运用的也不是很溜,不过多敲多练,应该会有进步吧</b>

创建类和使用类

创建一个 Dog 类

---------------------------------------------------------------------

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)    

my_dog.sit()    

my_dog.roll_over()  

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

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

------------------------------------------------------------------------

Willie is now sitting.    

Willie rolled over!    

My dog's name is Willie.    

My dog is 6 years old.

创建多个实例

------------------------------------------------------------------------------

your_dog = Dog('lucy', 3)

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

my_dog.sit()

print("\nYour dog's name is " + your_dog.name.title() + ".")    

print("Your dog is " + str(your_dog.age) + " years old.")    

your_dog.sit()

My dog is 6 years old.    

Willie is now sitting.

Your dog's name is Lucy.    

Your dog is 3 years old.    

Lucy is now sitting.

Car 类练习

------------------------------------------------------------------------------------

class Car():    

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

          self.make = make    

          self.model = model    

           self.year = year    

     def get_descriptive_name(self):    

          long_name = self.year + ' ' + self.make + ' ' + str(self.model)    

          return long_name.title() 

my_new_car = Car('audi', 24, '2016')    

print(my_new_car.get_descriptive_name())

2016 Audi 24    

添加属性默认值

-------------------------------------------------------------------------------------------

          self.year = year    

             self.odometer_reading = 0

          long_name = str(self.year) + ' ' + self.make + ' ' + str(self.model)    

          return long_name.title()

     def read_odometer(self):    

          print("This car has " + str(self.odometer_reading) + " miles on it.")

my_new_car = Car('audi', '24', '2016')    

print(my_new_car.get_descriptive_name())    

my_new_car.read_odometer()

This car has 0 miles on it.

修改属性的值

          self.odometer_reading = 0

           return long_name.title()

my_new_car.odometer_reading = 23    

This car has 23 miles on it.

通过方法修改属性的值

           self.make = make    

     def update_odometer(self, mileage):    

          self.odometer_reading = mileage

print(my_new_car.get_descriptive_name()) 

my_new_car.update_odometer(45)    

This car has 45 miles on it.   

通过方法对属性的值进行递增

           long_name = str(self.year) + ' ' + self.make + ' ' + str(self.model)    

          if mileage &gt;= 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

my_used_car = Car('subaru', 'outback', 2013)    

print(my_used_car.get_descriptive_name())

my_used_car.update_odometer(23500)    

my_used_car.read_odometer()

my_used_car.increment_odometer(100)    

2013 Subaru Outback    

This car has 23500 miles on it.    

This car has 23600 miles on it.

继承 : 子类的方法 __init__( )

父类必须包含在当前文件中,且位于子类前面

定义子类时,括号中必须指定父类的名称

super( ) 是一个特殊函数,将父类和子类关联起来,让 ElectricCar 实例包含父类的所有属性

父类也称为超类。

           self.model = model    

               self.odometer_reading = mileage    

               print("You can't roll back an odometer!")    

class ElectricCar(Car):    

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

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

print(my_tesla.get_descriptive_name())

2016 Tesla Model S

给子类定义属性和方法

class Car():  

     def get_descriptive_name(self):  

     def read_odometer(self):  

     def update_odometer(self, mileage):  

           else:    

          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', 2016)  

print(my_tesla.get_descriptive_name())    

my_tesla.describe_battery()

2016 Tesla Model S  

This car has a 70-kWh battery.

重写父类的方法

假设 Car 类中有一个名为 fill_gas_tank( ) 的函数,但是它对电动汽车毫无意义

可以在子类中重写该函数,Python就会运转子类中的代码,

而且还会保留父类中的其他函数

------------------------------------------------------------

def fill_gas_tank():  

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

------------------------------------------------------------  

将实例用作属性

新建一个 class Battery() 的类

在 class ElectricCar(Car) 类中指定 class Battery()

           print("This car has " + str(self.odometer_reading) + " miles on it.")

class Battery():    

     def __init__(self, battery_size=70):    

          self.battery_size = battery_size    

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

           self.battery = Battery()

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

my_tesla.battery.describe_battery()

This car has a 70-kWh battery.  

导入单个类

my_car.py导入car.py中的 Car 类

car.py 文件内容如下

my_car.py 文件内容如下

-----------------------------------------------------------------

from car import Car

my_new_car = Car('audi', '24', 2016)  

my_new_car.odometer_reading = 23

导入模块中的类

从 car.py 文件中导入 ElectricCar 类

-------------------------------------

from car import ElectricCar

导入模块中的多个类

------------------------------------------

from car import ElectricCar, Car

导入整个模块

直接导入 car.py 文件中全部函数

import car

my_beetle = car.Car(‘volkswagen’, ‘beetle’)

Python标准库

collections 模块中的 OrderedDict 类

from collections import OrderedDict

favorite_languages = OrderedDict()

favorite_languages['jen'] = 'python'  

favorite_languages['sarah'] = 'c'    

favorite_languages['edward'] = 'ruby'    

favorite_languages['phil'] = 'python'

for name, language in favorite_languages.items():  

     print(name.title() + "'s favorite language is " + language.title() + ".")

Jen's favorite language is Python.

Sarah's favorite language is C.

Edward's favorite language is Ruby.

Phil's favorite language is Python.