Python(5)-类
1.类
在面对对象编程中,编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,定义一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。
根据累来创建对象被称为实例化,这样能够使用类的实例。
1.1创建类
class ClassName():
1.2方法__init__()
类中的函数称为方法,唯一重要的差别是调用方法的方式。
class Dog():
def __init__(self, name):
“””初始化属性name“”“
self.name = name
def roll_over(self):
"""模拟小狗被命令时打滚”""
print(self.name.title() + " rolled over!")
如上例,__init__()是一个特殊的方法,每当你根据这个类创建新的实例时,都会自动运行它。这个方法的定义中,形参self必不可少,还必须在位于其他形参的前面。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
1.3根据类创建实例
举例如1.2的类,创建实例:
my_dog = Dog(‘aDai’)
print(“My dog’s name is “ + my_dog.name.title() + “.”)
使用实参‘aDai’调用Dog类中的方法__init__()。方法__init__()创建一个表示特定小狗的示例,并使用我们提供的值来设置属性name。
(1)访问属性
要访问实例的属性,可使用句点表示法。
my_dog.name
(2)调用方法
my_dog = Dog(‘aDai’)
my_dog.roll_over()
结果:aDai rolled over!
(3)创建多个实例
my_dog = Dog(‘aDai’)
you_dog = Dog(‘aHua’)
2.使用类和实例
举例:
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):
--snip--
def read_odometer(self):
"""打印一条指出汽车里程的消息"""
print("This car has " + str(self.odometer_reading) + " miles on it.”)
2.1修改属性的值
(1)直接修改属性的值
my_new_car = Car(‘haha’, ‘a4’, 2016)
my_new_car.odometer_reading = 23 修改类里定义的值
my_new_car.read_odometer()
(2)通过方法修改属性的值
在Car类里面增加方法如下:
def update_odometer(self, mileage):
"""将里程表读数设置为指定的值”""
self.odometer_reading = mileage
然后就可以通过调用该方法修改这个值:
my_new_car.update_odometer(23)
my_new_car.read_odometer()
(3)通过方法对属性的值进行递增
在Car类里面增加方法如下:
def increment_odometer(self, miles):
"""将里程表读数增加指定的量”""
self.odometer_reading += miles
3.继承
要想编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。
创建子类时,父类必须包含在当前文件中,且位于子类前面,例如:
class Car(): 父类
—snip—
class ElectricCar(Car):
"""电动汽车的独特之处”""
def __init__(self, make, model, year):
"""初始化父类的属性”""
super().__init__(make, model, year)
—snip—
super()是一个特殊函数,帮助Python将父类和子类关联起来。让Python调用ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。
4.将实例用作属性
举例如下:
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() 在实例my_tesla中查找属性battery,并对存储在该属性中的Battery实例调用方法describe_battery()。
这样可以很详细的描述battery,且不会让ElectricCar类混乱不堪。
5.导入类
5.1导入单个类
from module_name import class_name1
5.2从一个模块中导入多个类
from module_name import class_name1,class_name2
5.3导入整个模块
import module_name
5.4导入模块中的所有类
from module_name import *