python入门学习:8.类

关键点:

8.1 创建和使用类8.2 使用类和实例8.3 继承8.4 导入类

8.1 创建和使用类

  面向对象编程是最有效的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。根据类来创建对象被称为实例化,这让你能够使用类。
8.1.1 创建dog类
  下面创建一个dog类:

 1calss Dog():
2
3    def __init__(self,name,age):
4        self.name = name
5        self.age = age
6
7    def sit(self):
8        print(self.name.title() + " is now sitting.")
9
10    def roll_over(self):
11        print(self.name.title() + " rolled over!")
  • 方法__init__():

  __init__()是一个特殊的方法,每当根据Dog类创建新实例时,python都会自动运行它。在这个方法中开头和结尾都是两个下划线,这是python的约定俗称。其中__init__()函数的定义中形参self是必不可少的,还必须位于其他参数前面。python调用__init__()创建Dog类实例时将自动传入实参self,每个与类相关联的方法调用都自动传入实参self,它是一个指向实例化本身的引用,然实例能够访问类中的属性和方法。

  • 在python2.7中创建类:
      在python2.7中创建类时,需要做些修改--在括号内包含单词object
1class ClassName(object):
2    --snip--

8.1.2 根据类创建实例
  这里使用的是前面创建的Dog类。我们创建一个实例my_dog,调用__init__()方法,并设置属性name和age。方法__init__()并未显示包含return语句,但是python自动返回一个表示小狗的实例给my_dog

1class Dog():
2    -- snip --
3
4my_dog = Dog('willie',6)#创建一个实例
5print("My dog's name is " + my_dog.name.title()+".")
6print("My dog's age is " + str(my_dog.age)+".")
  • 访问属性:
    my_dog.name
  • 调用方法:
    my_dog.sit()
    mt_dog.roll_over()
  • 创建多个实例
1my_dog = Dog('willie',6)#创建一个实例
2you_dog = Dog('lucy',5)#创建一个实例

8.2 使用类和实例

8.2.1 Car类
  下面编写一个汽车类

 1class Car():
2
3    def __init__(self,make,model,year):
4        self.make = make
5        self.model = model
6        self.year = year
7
8    def get_descriptive_name(self):
9        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
10        return long_name.title()
11
12my_new_car = Car('audi','a4',2016)
13print(my_new_car.get_descriptive_name())

8.2.2 修改属性的值

  • 直接修改属性值
 1class Car():
2
3    def __init__(self,make,model,year):
4        self.make = make
5        self.model = model
6        self.year = year
7        self.odometer_reading = 0
8
9    def get_descriptive_name(self):
10        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
11        return long_name.title()
12    def read_odometer(self):
13        print("This car has " + str(self.odometer_reading) + " miles on it.)
14my_new_car = Car('audi','a4',2016)
15print(my_new_car.get_descriptive_name())
16my_new_car.odometer_reading = 23   #直接修改
17my_new_car.read_odometer()
18
  • 通过方法修改属性值
 1class Car():
2
3    def __init__(self,make,model,year):
4        self.make = make
5        self.model = model
6        self.year = year
7        self.odometer_reading = 0;
8
9    def get_descriptive_name(self):
10        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
11        return long_name.title()
12
13    def read_odometer(self):
14        print("This car has " + str(self.odometer_reading)+ " miles on it.")
15
16    def update_odometer(self,mileage):
17        self.odometer_reading = mileage
18
19my_new_car = Car('audi','a4',2016)
20
21print(my_new_car.get_descriptive_name())
22#my_new_car.odometer_reading = 23
23my_new_car.update_odometer(23)   #通过方法修改属性
24my_new_car.read_odometer()

8.3 继承

  一个类继承另一个类时,它将自动得到另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
8.3.1 子类的方法__init__()

  创建子类的实例时,python首先需要完成的任务是给父类的所有属性赋值。为此,子类的方法__init__()需要父类施以援手。

 1class Car():
2
3    def __init__(self,make,model,year):
4        self.make = make
5        self.model = model
6        self.year = year
7        self.odometer_reading = 0;
8
9    def get_descriptive_name(self):
10        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
11        return long_name.title()
12
13    def read_odometer(self):
14        print("This car has " + str(self.odometer_reading)+ " miles on it.")
15
16    def update_odometer(self,mileage):
17        self.odometer_reading = mileage
18
19class ElectricCar(Car):    #继承Car
20    def __init__(self,make,model,year):
21        #初始化父类的属性
22        super().__init__(make,model,year)  #关联父类和子类
23
24my_tesla = ElectricCar('tesla','model s',2016)
25print(my_tesla.get_descriptive_name())

8.3.2 给子类定义属性和方法
  给子类添加新的属性和方法

 1class Car():
2
3    def __init__(self,make,model,year):
4        self.make = make
5        self.model = model
6        self.year = year
7        self.odometer_reading = 0;
8
9    def get_descriptive_name(self):
10        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
11        return long_name.title()
12
13    def read_odometer(self):
14        print("This car has " + str(self.odometer_reading)+ " miles on it.")
15
16    def update_odometer(self,mileage):
17        self.odometer_reading = mileage
18
19
20class ElectricCar(Car):
21    def __init__(self,make,model,year):
22    #初始化父类的属性
23        super().__init__(make,model,year)
24        self.battery_size = 70    #新增加的属性在__init__()函数中修改
25
26    def describe_battery(self):   #新增加的方法
27        print("This car has a " + str(self.battery_size) + "-kwh battery.")
28
29my_tesla = ElectricCar('tesla','model s',2016)
30print(my_tesla.get_descriptive_name())
31my_tesla.describe_battery()

8.3.3 重写父类的方法
  对于父类的方法,子类可以对其重写。当创建一个实例对象调用该方法时会自动忽略父类方法。

 1class Car():
2
3    def __init__(self,make,model,year):
4        self.make = make
5        self.model = model
6        self.year = year
7        self.odometer_reading = 0;
8
9    def get_descriptive_name(self):
10        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
11        return long_name.title()
12
13    def read_odometer(self):
14        print("This car has " + str(self.odometer_reading)+ " miles on it.for car")
15
16    def update_odometer(self,mileage):
17        self.odometer_reading = mileage
18
19
20class ElectricCar(Car):
21    def __init__(self,make,model,year):
22    #初始化父类的属性
23        super().__init__(make,model,year)
24        self.battery_size = 70
25
26    def describe_battery(self):
27        print("This car has a " + str(self.battery_size) + "-kwh battery.")
28    def read_odometer(self): #重写
29        print("This car has " + str(self.odometer_reading)+ " miles on it. for ElectricCar") 
30my_tesla = ElectricCar('tesla','model s',2016)
31print(my_tesla.get_descriptive_name())
32my_tesla.describe_battery()
33my_tesla.read_odometer()     #调用子类

8.3.4 将实例用作属性
  使用代码模拟实物时,你可能会发现自己给自己添加的细节越来越多:属性和方法清单以及文件都越来越长。在这种情况下,可能需要将类的一部分作为独立的类提取出来。可以将大类拆分成多个协同工作的小类。

 1class Car():
2
3    def __init__(self,make,model,year):
4        self.make = make
5        self.model = model
6        self.year = year
7        self.odometer_reading = 0;
8
9    def get_descriptive_name(self):
10        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
11        return long_name.title()
12
13    def read_odometer(self):
14        print("This car has " + str(self.odometer_reading)+ " miles on it.for car")
15
16    def update_odometer(self,mileage):
17        self.odometer_reading = mileage
18
19class Battery():
20    def __init__(self,battery_size=70):
21        self.battery_size = battery_size
22
23    def describe_battery(self):
24        print("This car has a " + str(self.battery_size) + "-kwh battery.")
25
26class ElectricCar(Car):
27    def __init__(self,make,model,year):
28        super().__init__(make,model,year)
29        self.battery = Battery()           #自动创建一个battery实例
30
31my_tesla = ElectricCar('tesla','model s',2016)
32print(my_tesla.get_descriptive_name())
33my_tesla.battery.describe_battery()   

8.4 导入类

8.4.1 导入单个类
  通过import导入类。from 模块名 import 类名

1from car import Car
2my_new_car = Car('audi','a4',2016)
3print(my_new_car.get_descriptive_name())
4my_new_car.odometer_reading = 23
5my_new_car.read_odometer()

8.4.2 从一个模块导入多个类
  通过import导入多个类,from 模块名 类1,类2

1from car import Car,ElectricCar
2my_tesla = ElectricCar('tesla','model s',2016)
3print(my_tesla.get_descriptive_name())
4my_tesla.battery.describe_battery() 
5my_tesla.battery.get_range()

8.4.3 导入整个模块
  导入整个模块:import 模块名

1import car
2my_beetle = car.Car('volkswagen','beetlw',2016)
3print(my_beetle.get_descriptive_name())
4my_tesla= car.ElectricCar('tesla','model s',2016)
5print(my_tesla.get_descriptive_name())

8.4.4 导入模块中的所有类
  导入模块中的所有类:from module_name import *
8.4.5 在一个模块中导入另一个模块
  有时候,需要将类分散到多个模块中,以避免模块过大,或在一个模块中存储不相关的类。将类类存储在多个模块中时,你可能会发现一个模块中的类依赖于另一个模块中的类。在这种情况下,可在前一个模块中导入必要的类。

1#导入Car
2from car import Car 
3#导入 ElectricCar(electric_car 依赖car)
4from electric_car import ElectricCar 
5
6my_beetle = Car('volkswagen','beetle',2016)
7print(my_beetle.get_descriptive_name())
8my_tesla = Car('tesla','model s',2016)
9print(my_tesla.get_descriptive_name())

最新文章

  1. CSS Position 定位属性
  2. cefglue埋坑记录
  3. HTML5商城开发四 多图或多商品的水平滚动展示
  4. My97日期控件 选择日期区间
  5. jpg 批量压缩工具 v1.0
  6. jQuery-webcam(.NET)实现WEB摄像头监控
  7. Oracle 创建用户授权
  8. RPC框架——简单高效hessian的使用方式
  9. IOS开发-通知与消息机制
  10. Spring学习(7)--- @Required注解
  11. Spring @Transactional 使用
  12. WIN10系统触摸板快捷键
  13. 2015 多校联赛 ——HDU5363(快速幂)
  14. 刷机补丁包updater-script脚本
  15. Jboss解决只能通过localhost访问而不能使用IP访问项目的问题
  16. javaweb开发2.新建一个javaweb项目
  17. Eclipse 刚检出的项目 Build path 的时候提示 No action available
  18. LODOP弹出对话框获取保存文件的路径
  19. JVM 内部原理(六)— Java 字节码基础之一
  20. UIScrollview的 约束 contentsize contentoffset contentinset layoutsubviews needlayout等影响布局的属性

热门文章

  1. virtualbox中设置u盘启动
  2. vmware启动黑屏(本来是好的)
  3. git常用命令总结以及用github来展示你的前端页面
  4. iPhone X手机投屏电脑无线连接教程
  5. How To Do Master Record Mass Maintenance
  6. Python_基于Python同Linux进行交互式操作实现通过堡垒机访问目标机
  7. Python高级特性:迭代
  8. github上传流程图记录
  9. 关于ARM CM3的启动文件分析
  10. mysql练习----The JOIN operation