Python -- 8. 类
来源:互联网 发布:java io流读取视频 编辑:程序博客网 时间:2024/06/05 16:46
1. 创建和使用类
根据约定,在Python中,首字母大写的名称指的是类。
(1). 创建 类
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!")
- 方法init() 是一个特殊的方法,每当你根据Dog 类创建新实例时,Python都会自动运行它。
- 在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。
- 在这个方法的定义中,形参self 必不可少,还必须位于其他形参的前面。 Python调用这个init() 方法来创建Dog, 实例时,将自动传入实参self 。
- 每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
(2). 根据类创建实例
class Dog():--snip--my_dog = Dog('willie', 6)print("My dog's name is " + my_dog.name.title() + ".")print("My dog is " + str(my_dog.age) + " years old.")
2. 使用类和实例
(1). Car类
class Car(): """一次模拟汽车的简单尝试""" def __init__(self, make, model, year): """初始化描述汽车的属性""" self.make = make self.model = model self.year = year def get_descriptive_name(self): """返回整洁的描述性信息""" long_name = str(self.year) + ' ' + self.make + ' ' + self.model return long_name.title()my_new_car = Car('audi', 'a4', 2016)print(my_new_car.get_descriptive_name())
(2). 给属性指定默认值
如设置默认值时,在方法init() 内指定这种初始值
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.")my_new_car = Car('audi', 'a4', 2016)print(my_new_car.get_descriptive_name())my_new_car.read_odometer()
(3). 修改属性的值
直接修改属性的值
my_new_car.odometer_reading = 23
通过方法修改属性的值
def update_odometer(self, mileage): """将里程表读数设置为指定的值""" self.odometer_reading = mileage
3. 继承
(1). 子类的方法_init_()
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 += milesclass ElectricCar(Car): """电动汽车的独特之处""" def __init__(self, make, model, year): """初始化父类的属性""" super().__init__(make, model, year)my_tesla = ElectricCar('tesla', 'model s', 2016)print(my_tesla.get_descriptive_name())
- 定义子类时,必须在括号内指定父类的名称。
- init() 接受创建Car 实例所需的信息, super() 是一个特殊函数,帮助Python将父类和子类关联起来。
(2). 给子类定义属性和方法
class Car():--snip--class ElectricCar(Car): """Represent aspects of a car, specific to electric vehicles.""" def __init__(self, make, model, year): """ 电动汽车的独特之处 初始化父类的属性,再初始化电动汽车特有的属性 """ super().__init__(make, model, year) 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()
(3).重写父类的方法
- 对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写.
- 为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。
(4).将实例用作属性
我们可将这些属性和方法提取出来,放到另一个名为Battery 的类中,并将一个Battery 实例用作ElectricCar 类的一个属性:
class Car():--snip--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', 2016)print(my_tesla.get_descriptive_name())my_tesla.battery.describe_battery()
4. 导入类
(1). 导入单个类
#外面有一个car.py文件,里面有一个Car类from car import Carmy_new_car = Car('audi', 'a4', 2016)print(my_new_car.get_descriptive_name())my_new_car.odometer_reading = 23my_new_car.read_odometer()
(2). 在一个模块中存储多个类
#外面有一个car.py文件,里面有多个类,Car类,ElectricCar类from car import ElectricCarmy_tesla = ElectricCar('tesla', 'model s', 2016)print(my_tesla.get_descriptive_name())my_tesla.battery.describe_battery()my_tesla.battery.get_range()
(3). 从一个模块中导入多个类
from car import Car, ElectricCarmy_beetle = Car('volkswagen', 'beetle', 2016)print(my_beetle.get_descriptive_name())my_tesla = ElectricCar('tesla', 'roadster', 2016)print(my_tesla.get_descriptive_name())
(4). 导入整个模块 【推荐】
你还可以导入整个模块,再使用句点表示法访问需要的类。
#外面有一个car.py文件,里面有多个类import carmy_beetle = car.Car('volkswagen', 'beetle', 2016)print(my_beetle.get_descriptive_name())my_tesla = car.ElectricCar('tesla', 'roadster', 2016)print(my_tesla.get_descriptive_name())
(5). 导入模块中的所有类 [不推荐]
from module_name import *
不推荐使用这种导入方式,有可能会和你自己的类或函数重名
5. Python标准库
6. 类编码风格
- 类名应采用驼峰命名法 ,即将类名中的每个单词的首字母都大写,而不使用下划线。
- 实例名和模块名都采用小写格式,并在单词之间加上下划线。
0 0
- Python -- 8. 类
- 8.Python
- python类
- Python 类
- PYTHON类
- Python类
- python类
- python 类
- Python类
- python 类
- python 类
- Python 类
- python 类
- python类
- Python-类
- Python类
- python 类
- python 类
- 机器学习小组知识点30:接受-拒绝采样(Acceptance-Rejection Sampling)
- 欢迎使用CSDN-markdown编辑器
- UVALive 6957 Hyacinth (DFS) -- 解题报告
- iOS几种数据存储方式
- RNN与LSTM 理解
- Python -- 8. 类
- Python学习之路--进程,线程,协程
- VS2008用devenv.com命令行工具自动编译工程
- redis 的两种持久化方式及原理
- 函数的相关和卷积
- HTML基础知识(3)
- 喵哈哈村的魔法考试 Round #1 (Div.2) C 喵哈哈村的魔法石(II) 背包dp
- android studio 使用SystemProperties
- 分时租赁企业信息大全