多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ***** # 9.1 创建和使用类 ## 9.1.1 创建 Dog 类 根据Dog类创建的每个实例都将存储名字和年龄 ``` class Dog(): """A simple attempt to model a dog.""" def __init__(self, name, age): """Initialize name and age attributes.""" self.name = name self.age = age def sit(self): """Simulate a dog sitting in response to a command.""" print(self.name.title() + " is now sitting.") def roll_over(self): """Simulate rolling over in response to a command.""" print(self.name.title() + " rolled over!") ``` 类的首字母大写 **1. 方法_init_()** 创造实例的方法 _init_()是一个特殊的方法,每当你根据Dog类创建新实 例时, Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。 将方法_init_()定义成了包含三个形参: self、 name和age。在这个方法的定义中,形 参self必不可少,还必须位于其他形参的前面。 因为 Python调用这个_init_()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法 ## 9.1.2 根据类创建实例 ``` 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.") ``` Python使用实参'willie'和6调用Dog类中的方法_init_()。 方法_init_()创建一个表示特定小狗的示例 **1. 访问属性** 访问实例的属性,可使用句点表示法。 my_dog.name **2. 调用方法** 根据Dog类创建实例后,就可以使用句点表示法来调用Dog类中定义的任何方法 ``` my_dog.sit() my_dog.roll_over() ``` **3. 创建多个实例** ``` my_dog = Dog('willie', 6) your_dog = Dog('lucy', 3) ``` # 9.2 使用类和实例 ## 9.2.1 Car 类 编写一个表示汽车的类 ``` class Car(): """A simple attempt to represent a car.""" def __init__(self, manufacturer, model, year): """Initialize attributes to describe a car.""" self.manufacturer = manufacturer self.model = model self.year = year def get_descriptive_name(self): """Return a neatly formatted descriptive name.""" long_name = str(self.year) + ' ' + self.manufacturer + ' ' + self.model return long_name.title() my_new_car = Car('audi', 'a4', 2016) print(my_new_car.get_descriptive_name()) ``` ## 9.2.2 给属性指定默认值 类中的每个属性都必须有初始值,哪怕这个值是0或空字符串。在有些情况下,如设置默认值时,在方法_init_()内指定这种初始值是可行的;如果你对某个属性这样做了,就无需包含 为它提供初始值的形参。 下面来添加一个名为odometer_reading的属性,其初始值总是为0 ``` class Car(): """A simple attempt to represent a car.""" #每个方法的第一个形参是self def __init__(self, manufacturer, model, year): """Initialize attributes to describe a car.""" self.manufacturer = manufacturer self.model = model self.year = year self.odometer_reading = 0 def get_descriptive_name(self): """Return a neatly formatted descriptive name.""" long_name = str(self.year) + ' ' + self.manufacturer + ' ' + self.model return long_name.title() ``` ## 9.2.3 修改属性的值 1. 直接修改属性的值 ``` my_new_car.odometer_reading = 23 ``` 2. 通过方法修改属性的值 ![](https://img.kancloud.cn/ad/a4/ada4e00828beaceadc36f8269d858d02_414x210.png) 3. 通过方法对属性的值进行递增 ![](https://img.kancloud.cn/ad/a4/ada4e00828beaceadc36f8269d858d02_414x210.png)