《Python编程从入门到实践》_第九章_类
创建一个简单的类
根据Dog类创建的每个实列都将存储名字和年龄。我们赋予了每条小狗蹲下(sit())和打滚(roll_over())的能力:
class Dog():
"""一次模拟小狗的简单尝试"""
def __init__(self, name, age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + "now is sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + "rolled over!")
my_dog = Dog('tom','')
print("my dog name is " + my_dog.name.title() )
访问属性
class Dog():
"""一次模拟小狗的简单尝试"""
def __init__(self, name, age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " now is sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
my_dog = Dog('tom',3)
print(my_dog.name)
print(my_dog.age)
#运行结果
tom
3
调用方法
class Dog():
"""一次模拟小狗的简单尝试"""
def __init__(self, name, age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " now is sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
my_dog = Dog('tom',3)
my_dog.sit()
my_dog.roll_over()
#运行结果
Tom now is sitting.
Tom rolled over!
根据Dog类创建实例后,就可以使用句点表示来调用Dog来定义的任何方法
创建多个实例
class Dog():
"""一次模拟小狗的简单尝试"""
def __init__(self, name, age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " now is sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
my_dog = Dog('tom',3)
your_dog = Dog('Mei',2)
print("My dog name is " + my_dog.name.title())
print("Your dog name is " + your_dog.name.title())
#运行结果
My dog name is Tom
Your dog name is Mei
可按需求根据类创建任意数量的实例。
使用类和实例
给属性指定默认值
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""汽车的初始化"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 100
def get_descri_name(self):
"""描述汽车"""
long_name = str(self.year) + ' ' + self.model + ' ' + self.make
return long_name
my_car = Car('audi', 'a4', '')
print(my_car.model)
print(my_car.get_descri_name())
#运行结果
a4
2017 a4 audi
直接修改属性的值
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""汽车的初始化"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 100
def get_descri_name(self):
"""描述汽车"""
long_name = str(self.year) + ' ' + self.model + ' ' + self.make
return long_name
my_car = Car('audi', 'a4', '')
print(my_car.get_descri_name())
my_car.year = 2016
print(my_car.get_descri_name())
#运行结果
2017 a4 audi
2016 a4 audi
通过方法修改
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""汽车的初始化"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 100
def get_descri_name(self):
"""描述汽车"""
long_name = str(self.year) + ' ' + self.model + ' ' + self.make
return long_name
def update(self, mile):
"""更新里程值"""
if mile > self.odometer_reading:
self.odometer_reading = mile
else:
print("You can't roll back an odometer")
def increment_odometer(self,mile):
"""增加里程"""
self.odometer_reading += mile
def read_odometer(self):
"""打印汽车的里程"""
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_car = Car('audi', 'a4', '')
my_car.read_odometer()
my_car.odometer_reading = 10 #直接修改里程值
my_car.update(200) #通过方法修改里程
my_car.read_odometer()
my_car.increment_odometer(10)
my_car.read_odometer()
#运行结果
This car has 100 miles on it.
This car has 200 miles on it.
This car has 210 miles on it.
继承
如果我们想再一个class继承另一个类的属性,可以在类后面括号中加入类的名称,举例如下:
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""汽车的初始化"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 100
def get_descri_name(self):
"""描述汽车"""
long_name = str(self.year) + ' ' + self.model + ' ' + self.make
return long_name
def update(self, mile):
"""更新里程值"""
if mile > self.odometer_reading:
self.odometer_reading = mile
else:
print("You can't roll back an odometer")
def increment_odometer(self,mile):
"""增加里程"""
self.odometer_reading += mile
def read_odometer(self):
"""打印汽车的里程"""
print("This car has " + str(self.odometer_reading) + " miles on it.")
class ElectricCar(Car):
"""电动汽车的独特特性"""
def __init__(self, make, model, year):
"""初始化父类的属性"""
super().__init__(make, model, year)
my_tesla = ElectricCar('tesla', 'model s', '')
print(my_tesla.get_descri_name())
#运行结果
2016 model s tesla
为了继承父类的属性,还需要加入一个特殊的函数super(),帮助python将夫类和子类关联起来。
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""汽车的初始化"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 100
def get_descri_name(self):
"""描述汽车"""
long_name = str(self.year) + ' ' + self.model + ' ' + self.make
return long_name
def update(self, mile):
"""更新里程值"""
if mile > self.odometer_reading:
self.odometer_reading = mile
else:
print("You can't roll back an odometer")
def increment_odometer(self,mile):
"""增加里程"""
self.odometer_reading += mile
def read_odometer(self):
"""打印汽车的里程"""
print("This car has " + str(self.odometer_reading) + " miles on it.")
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(Car):
"""电动汽车的独特特性"""
def __init__(self, make, model, year):
"""初始化父类的属性"""
super().__init__(make, model, year)
self.battery = Battery()
my_tesla = ElectricCar('tesla', 'model s', '')
print(my_tesla.get_descri_name())
my_tesla.battery.describe_battery()
#运行结果
2016 model s tesla
This car has a 70-kwh battery.
导入类
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""汽车的初始化"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 100
def get_descri_name(self):
"""描述汽车"""
long_name = str(self.year) + ' ' + self.model + ' ' + self.make
return long_name
def update(self, mile):
"""更新里程值"""
if mile > self.odometer_reading:
self.odometer_reading = mile
else:
print("You can't roll back an odometer")
def increment_odometer(self,mile):
"""增加里程"""
self.odometer_reading += mile
def read_odometer(self):
"""打印汽车的里程"""
print("This car has " + str(self.odometer_reading) + " miles on it.") 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(Car):
"""电动汽车的独特特性"""
def __init__(self, make, model, year):
"""初始化父类的属性"""
super().__init__(make, model, year)
self.battery = Battery()
创建另一个文件my_car.py,导入一个类
from car import Car
my_car = Car('audi', 'a4', '')
一个模块中可以存储多个类,所以可以一次导入多个类
from car import Car,Battery,ElectricCar
my_tesla = ElectricCar('tesla', 'model s', '')
print(my_tesla.get_descri_name())
my_tesla.battery.describe_battery()
导入整个模块
import car #导入整个模块的时候,需要使用句点表示法访问需要的类
my_tesla = car.ElectricCar('tesla', 'model s', '')
print(my_tesla.battery)
导入所有类
from car import * #导入所有的类
《Python编程从入门到实践》_第九章_类的更多相关文章
- 《Python编程从入门到实践》第二章_变量和简单数据类型
什么是变量呢? 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Pyth ...
- #Python编程从入门到实践#第四章笔记
#Python编程从入门到实践#第四章笔记 操作列表 1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...
- #Python编程从入门到实践#第三章笔记
列表简介 1.什么是列表 列表:由一系列按也顶顺序排列的元素组成.元素之间可以没有任何关系. 列表:用方括号[]表示,并用逗号分隔其中元素.名称一般为复数 2.访问元素 (1)列表是有序集合 ...
- 《Python编程从入门到实践》_第十章_文件和异常
读取整个文件 文件pi_digits.txt #文件pi_digits.txt 3.1415926535 8979323846 2643383279 下面的程序打开并读取整个文件,再将其内容显示到屏幕 ...
- 《python编程从入门到实践》读书实践笔记(一)
本文是<python编程从入门到实践>读书实践笔记1~10章的内容,主要包含安装.基础类型.函数.类.文件读写及异常的内容. 1 起步 1.1 搭建环境 1.1.1 Python 版本选择 ...
- Python编程从入门到实践笔记——异常和存储数据
Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...
- Python编程从入门到实践笔记——文件
Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...
- Python编程从入门到实践笔记——类
Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...
- Python编程从入门到实践笔记——函数
Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...
- Python编程从入门到实践笔记——用户输入和while循环
Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...
随机推荐
- 以太坊系列之六: p2p模块--以太坊源码学习
p2p模块 p2p模块对外暴露了Server关键结构,帮助上层管理复杂的p2p网路,使其集中于Protocol的实现,只关注于数据的传输. Server使用discover模块,在指定的UDP端口管理 ...
- 内存布局------c++程序设计基础、编程抽象与算法策略
图中给出了在一个典型c++程序中如何组织内存的框架.程序中的指令(在底层都是按位存储的).全局变量.静态对象和只读常量往往被存储在静态去(static area)(第二个图中的数据段.代码段.值得注意 ...
- IIS只允许某些IP访问
1. 2. 3.访问时提示 4.设置允许访问的IP 5.指定的IP访问时没问题了,而其他的IP不允许访问
- win10 + Lubuntu 双系统安装
win10 + Lubuntu 双系统安装 最近重装了系统,索性直接安装win10 + Lubuntu 双系统,便于在物理机下进行 Linux开发. 这里我选择的 Linux 发行版是 Lubuntu ...
- 题解 P2863 【[USACO06JAN]牛的舞会The Cow Prom】
题目链接 赤裸裸的板子,就加一个特判就行.直接上代码 #include<stdio.h> #include<algorithm> #include<iostream> ...
- The server of Apache (四)——配置防盗链和隐藏版本信息
一.防盗链 防盗链就是防止别人的网站代码里面盗用我们服务器的图片.文件.视频等相关资源,比如我们的网页的图片有链接,别人把链接复制粘贴到他们的服务器页面里,图片不在他们自己的网站里,每次打开他们的网站 ...
- c++11中关于`std::thread`线程传参的思考
关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...
- 5、用Numpy实现结构体
1.结构数组: 在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组.和C语言一样,在NumPy中也很容易 ...
- 【Linux】DNS服务-BIND基础配置
1.BIND简介 现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写,现在最新的版本是9,有ISC(Intern ...
- 洛谷P2679 子串
放题解 题目传送门 放代码