类的定义与声明
class
那行后面一定要跟:
类的定义里面,属性的引用一定要加self.
__init__(self)
是默认的类初始化方法,一定要用,实例化时自动调用。
类方法的第一个参数一般为self
。
class Dog():
"""一次模拟小狗的简单尝试"""
def __init__(self, name, age):
"""初始化属性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.name = 'haha'
print(my_dog.name.title() + ' is my dog and ' + str(my_dog.age) + ' years old.')
my_dog.roll_over()
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year, odometer=0): #给属性指定默认值
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
self.odometer = odometer
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) + " miles on it.")
def update_odometer(self, mileage):
"""
将里程表读数设置为指定的值
禁止将里程表读数往回调
"""
if mileage >= self.odometer:
self.odometer = mileage
else:
print("You can't roll back an odometer!")
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
my_new_car.odometer = 23 #直接修改属性的值
my_new_car.read_odometer()
my_new_car.update_odometer(110) #通过方法修改属性的值
my_new_car.read_odometer()
继承
创建子类时,父类必须包含在当前文件中,且位于子类前面。
super()
是一个特殊函数,将父类和子类关联起来。
class 子类名(父类名):
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.')
def get_range(self):
"""打印一条消息,指出电瓶的续航里程"""
if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270
message = "This car can go approximately " + str(range)
message += ' miles on a full charge.'
print(message)
class ElectricCar(Car):
"""电动汽车的独特之处"""
def __init__(self, make, model, year):
"""
先初始化父类的属性,再初始化电动汽车特有的属性
"""
super().__init__(make, model, year)
# self.battery_size = 70
self.battery = Battery() #将示例用作属性
# def describe_battery(self):
# """打印一条描述电瓶容量的消息"""
# print("This car has a " + str(self.battery_size) + '-kWh battery.')
def update_odometer(self): #重写父类方法
"""里程归零"""
self.odometer = 0
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
#my_tesla.describe_battery()
my_tesla.battery.describe_battery()
my_tesla.odometer = 100
my_tesla.read_odometer() #调用父类方法
my_tesla.update_odometer()
my_tesla.read_odometer()
my_tesla.battery.get_range()
my_tesla.battery.battery_size = 85 #修改属性示例的属性
my_tesla.battery.get_range()
从模块中导入类
从模块中导入类和从模块中导入函数类似,参见Python入门笔记:函数。
from module_name import class_name1, class_name2, ...
example_name = class_name()
import module_name
example_name = module_name.class_name()
类名采用驼峰命名法;
示例名和模块名都采用小写格式,并在单词之间加下划线。
标准库
标准库是一组模块,安装的Python都包含。
标准库说明资源:
Python3 标准库概览
Python 3 Module of the Week
The Python Standard Library
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 languages is " + language.title() + ".")
如果觉得此文章有用,点击这里,万分感谢。
Reference
[美]Eric Matthes著,袁国忠译. Python编程从入门到实践[M]. 北京:人民邮电出版社. 2016.7.