python从入门到实践-9章类
#!/user/bin/env python
# -*- coding:utf-8 -*-
# 类名采用的是驼峰命名法,即将类名中每个单词的首字母大写,而不使用下划线。
# 对于每个类,都应紧跟在类定义后面包含一个文档字符串:简要描述类的功能,并遵循写函数的文档字符串时的格式约定
# 每个模块也应当包含一个文档字符串,对其中的类可用于做什么进行描述。
class Dog():
def __init__(self,name,age):
'''__init__ 方法'''
'''形参self必不可少,还必须位于其他形参前面'''
self.name = name # 将name赋值到 self 为前缀的变量 供类使用
self.age = age # 【这一步是必须的】
def sit(self):
print(self.name.title() + " is setting now.")
def roll_over(self):
print(self.name.title() + " rolled over!")
# self 为前缀的变量都可以供类中所有方法使用。
my_dog = Dog('wille',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 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
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it")
def update_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):
"""将里程表读数增加指定的量"""
self.odometer_reading += miles
my_new_car = Car('audi','a4','2016')
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
# 修改属性的值
# 1.直接访问汽车属性odometer_reading值
# my_new_car.odometer_reading = 23
# my_new_car.read_odometer()
# 2.通过方法修改属性的值
# 创建类函数来修改odometer_reading的值
my_new_car.update_odometer(23)
my_new_car.read_odometer()
# 通过方法对属性的值进行递增 increment_odometer
print('')
# 【继承】
# super() 是一个特殊的函数,帮助python将父类和子类联系起来。
# 这行代码让python调用其父类的方法__init__,让子类包含父类所有的属性。父类(又名超类superclass)
class ElectricCar(Car):
def __init__(self,make,model,year):
# 电动车的独特之处,初始化父类的属性,在初始化电瓶车独特的属性
super().__init__(make,model,year) # 调用其父类的方法__init__
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()
# 重写父类的方法 重名(覆盖)即可进行重写
print("")
# 【将实列用作属性】
class Battery():
#模拟电动车电瓶
def __init__(self,batterY_size=70):
self.battery_size = batterY_size
def describe_battery(self):
print("this car has a " + str(self.battery_size) + "-kwh battery.")
class ElectricCar_0(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
self.battery = Battery()
# 调用实列当做属性
my_tesla = ElectricCar_0('tesla','model s','2016')
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
# 方便于对Battery() 进行修改
# 导入类
# 导入单个类:from car(文件) import ElectricCar
# 从一个模块中导入多个类:from car import Car,ElectricCar
# 导入整个模块,在使用句号表示访问需要的类:import car car.Car
# 导入模块中所有类:from module_name import *
# 从模块中导入的类可以被【继承】
# python标准库和外部库
python从入门到实践-9章类的更多相关文章
- Python:从入门到实践--第九章-类--练习
#.餐馆:创建一个名为Restaurant的类,其方法_init_()设置两个属性:restaurant_name和cuisine_type. #创建一个名为describe_restaurant的方 ...
- python从入门到实践-11章测试模块(测试函数出问题)
#!/user/bin/env python# -*- coding:utf-8 -*- # 用python中unittes中工具来测试代码 # 1.测试函数import unittestfrom n ...
- python从入门到实践-10章文件和异常(括号问题)
#!/user/bin/env python# -*- coding:utf-8 -*- # 1.从文件中读取数据with open('pi_digits.txt') as file_object: ...
- python从入门到实践 第二章
python变量赋值: python的变量赋值 可以是单引号 也可以是双引号python 变量赋值的时候不能加()的 比如 name = "My Name is GF"变量赋值的时 ...
- python从入门到实践-8章函数
#!/user/bin/env python# -*- coding:utf-8 -*- # 给形参指定默认值时,等号两边不要有空格 def function_name("parameter ...
- python从入门到实践-7章用户输入和while循环
#!/user/bin/env python# -*- coding:utf-8 -*- # input() 可以让程序暂停工作# int(input('please input something: ...
- python从入门到实践-6章字典
#!/user/bin/env python# -*- coding:utf-8 -*- # 前面不用空格,后面空格# 访问只能通过keyalien_0 = {'color': 'green', 'p ...
- python从入门到实践-5章if语句
#!/user/bin/env python cars = ['audi','bmw','subaru','toyota']for car in cars: if car == 'bmw': prin ...
- python从入门到实践-4章操作列表
magicians = ['alice','david','carolina']for magician in magicians: print(magician) print(magician.ti ...
随机推荐
- c++消息队列的实现
#ifndef NET_FRAME_CONCURRENT_QUEUE_H #define NET_FRAME_CONCURRENT_QUEUE_H #include <queue> # ...
- 写一个python 爬虫爬取百度电影并存入mysql中
目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...
- PCB开钢网不容忽视的问题
作为PCB工程师,或许你已经出过很多次的钢网文件,但却不一定了解出钢网有哪些要求. 1.首先我们来看下钢网的实物图,就是一块薄薄的钢板,钢网上有很多焊盘孔.把钢网盖在PCB板上后,这些焊盘孔就会和PC ...
- ELK搭建<三>:安装Kibana
1.下载Kibana,如果需要低版本的,低版本下载 2.解压后,进入config修改配置文件kibana.yml : #运行的端口号 server.port: 5601 #服务器地址 server.h ...
- 解决svn更新项目目录时“Error:svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted”的报错问题
今天在IDEA更新项目目录时,发现报错“Error:svn: E155037: Previous operation has not finished; run 'cleanup' if it was ...
- git pull命令的用法
git pull用法: git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并. 一句话总结git pull和git fetch的区别: git pull = git fet ...
- struts2-第一章-基础用法3
一,结果类型配置 在之前servlet学习中,知道网页页面路径跳转有两种方式,内部跳转(请求转发)和外部跳转(重定向),两者的区别,内部跳转浏览器地址不会变化 可以保存上一次请求的数据 外部跳转浏览器 ...
- swoole框架基本总结
框架-Swoole扩展-Swoole文档中心 http://wiki.swoole.com/wiki/page/p-framework.html swoole有两个部分. 一个是PHP扩展,用C开发的 ...
- Servlet校验密码之Mariadb篇
Servlet校验密码之Mariadb篇 先放图-- 数据库: 效果图: 整体来说与上一篇差距不大,这次主要是采用数据库来进行校验,我使用的是Mariadb,安装与配置不用我说 主要有一点,导入连接器 ...
- Asp.net并发请求导致的数据重复插入问题
前段时间工作中,有客户反应了系统中某类待办重复出现两次的情况.我核实了数据之后,分析认为是并发请求下导致的数据不一致性问题,并做了重现.其实这并不是一个需要频繁调用的功能,但是客户连续点击了两次,导致 ...