classDog():"""一次模拟小狗的简单尝试"""
def __init__(self, name, age):"""初始化属性name和age"""self.name=name
self.age=agedefsit(self):"""模拟小狗被命令时蹲下"""
print(self.name.title() + "now is sitting.")defroll_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 isTom
Your dog nameis Mei
可按需求根据类创建任意数量的实例。
使用类和实例
给属性指定默认值
类中的每个属性都必须有初始值,哪怕这个值是0或空字符串,在有些情况下,如设置默认值时,在方法__init__()内指定这种初始值时可以的没如果你对某个属性这样做了,就无需包含为他提供初始化的形参。
classCar():"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):"""汽车的初始化"""self.make=make
self.model=model
self.year=year
self.odometer_reading= 100
defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_name
my_car= Car('audi', 'a4', '2017')print(my_car.model)print(my_car.get_descri_name())#运行结果
a42017 a4 audi
直接修改属性的值
classCar():"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):"""汽车的初始化"""self.make=make
self.model=model
self.year=year
self.odometer_reading= 100
defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_name
my_car= Car('audi', 'a4', '2017')print(my_car.get_descri_name())
my_car.year= 2016
print(my_car.get_descri_name())#运行结果
2017a4 audi2016 a4 audi
通过方法修改
classCar():"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):"""汽车的初始化"""self.make=make
self.model=model
self.year=year
self.odometer_reading= 100
defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_namedefupdate(self, mile):"""更新里程值"""
if mile >self.odometer_reading:
self.odometer_reading=mileelse:print("You can't roll back an odometer")defincrement_odometer(self,mile):"""增加里程"""self.odometer_reading+=miledefread_odometer(self):"""打印汽车的里程"""
print("This car has" + str(self.odometer_reading) + "miles on it.")
my_car= Car('audi', 'a4', '2017')
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 100miles on it.
This car has200miles on it.
This car has210 miles on it.
继承
如果我们想再一个class继承另一个类的属性,可以在类后面括号中加入类的名称,举例如下:
classCar():"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):"""汽车的初始化"""self.make=make
self.model=model
self.year=year
self.odometer_reading= 100
defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_namedefupdate(self, mile):"""更新里程值"""
if mile >self.odometer_reading:
self.odometer_reading=mileelse:print("You can't roll back an odometer")defincrement_odometer(self,mile):"""增加里程"""self.odometer_reading+=miledefread_odometer(self):"""打印汽车的里程"""
print("This car has" + str(self.odometer_reading) + "miles on it.")classElectricCar(Car):"""电动汽车的独特特性"""
def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)
my_tesla= ElectricCar('tesla', 'model s', '2016')print(my_tesla.get_descri_name())#运行结果
2016 model s tesla
为了继承父类的属性,还需要加入一个特殊的函数super(),帮助python将夫类和子类关联起来。
在python2.X中,类supper的格式如下:supper(Eletric,self).__init__(make, model, year)
给子类定义属性和方法
让一个类继承另一个类后,可添加区分子类和父类所属的新属性和新方法。
将实例用作属性
classCar():"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):"""汽车的初始化"""self.make=make
self.model=model
self.year=year
self.odometer_reading= 100
defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_namedefupdate(self, mile):"""更新里程值"""
if mile >self.odometer_reading:
self.odometer_reading=mileelse:print("You can't roll back an odometer")defincrement_odometer(self,mile):"""增加里程"""self.odometer_reading+=miledefread_odometer(self):"""打印汽车的里程"""
print("This car has" + str(self.odometer_reading) + "miles on it.")classBattery():"""一次模拟电动汽车"""
def __init__(self,battery_size=70):"""初始化电瓶的属性"""self.battery_size=battery_sizedefdescribe_battery(self):"""打印一条描述电瓶容量的消息"""
print("This car has a" + str(self.battery_size) + "-kwh battery.")classElectricCar(Car):"""电动汽车的独特特性"""
def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)
self.battery=Battery()
my_tesla= ElectricCar('tesla', 'model s', '2016')print(my_tesla.get_descri_name())
my_tesla.battery.describe_battery()#运行结果
2016model s tesla
This car has a70-kwh battery.
导入类
导入单个或者多个类
一个文件car.py
classCar():"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):"""汽车的初始化"""self.make=make
self.model=model
self.year=year
self.odometer_reading= 100
defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_namedefupdate(self, mile):"""更新里程值"""
if mile >self.odometer_reading:
self.odometer_reading=mileelse:print("You can't roll back an odometer")defincrement_odometer(self,mile):"""增加里程"""self.odometer_reading+=miledefread_odometer(self):"""打印汽车的里程"""
print("This car has" + str(self.odometer_reading) + "miles on it.")classBattery():"""一次模拟电动汽车"""
def __init__(self,battery_size=70):"""初始化电瓶的属性"""self.battery_size=battery_sizedefdescribe_battery(self):"""打印一条描述电瓶容量的消息"""
print("This car has a" + str(self.battery_size) + "-kwh battery.")classElectricCar(Car):"""电动汽车的独特特性"""
def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)
self.battery= Battery()
创建另一个文件my_car.py,导入一个类
from car importCar
my_car= Car('audi', 'a4', '2017')
一个模块中可以存储多个类,所以可以一次导入多个类
from car importCar,Battery,ElectricCar
my_tesla= ElectricCar('tesla', 'model s', '2016')print(my_tesla.get_descri_name())
my_tesla.battery.describe_battery()
导入整个模块
importcar #导入整个模块的时候,需要使用句点表示法访问需要的类
my_tesla= car.ElectricCar('tesla', 'model s', '2016')print(my_tesla.battery)
导入所有类
from car import * #导入所有的类