Python编程从入门到实践笔记——类
<span style="color: #0000ff;">def</span> <span style="color: #800080;">__init__</span><span style="color: #000000;">(self,name,age):
</span><span style="color: #800000;">"""</span><span style="color: #800000;">初始化<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>name和age</span><span style="color: #800000;">"""</span><span style="color: #000000;">
self.name </span>=<span style="color: #000000;"> name
self.age </span>=<span style="color: #000000;"> age
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> sit(self):
</span><span style="color: #800000;">"""</span><span style="color: #800000;">模拟小狗被命令时蹲下</span><span style="color: #800000;">"""</span>
<span style="color: #0000ff;">print</span>(self.name.title() + <span style="color: #800000;">"</span><span style="color: #800000;"> is now sitting.</span><span style="color: #800000;">"</span><span style="color: #000000;">)
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> roll_over(self):
</span><span style="color: #800000;">"""</span><span style="color: #800000;">模拟小狗被命令时打滚</span><span style="color: #800000;">"""</span>
<span style="color: #0000ff;">print</span>(self.name.title() + <span style="color: #800000;">"</span><span style="color: #800000;"> rolled over!</span><span style="color: #800000;">"</span><span style="color: #000000;">)
<span style="color: #008000;">#<span style="color: #008000;">init()是一个特殊的方法,每当根据Dog类创建新实例时,Python都会自动运行它。 <span style="color: #008000;">
<span style="color: #008000;">在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。<span style="color: #008000;">
<span style="color: #008000;">方法init()定义成了包含三个形参:self、name和age。在这个方法的定义中,形参self必不可少,还必须位于其他形参的前面。<span style="color: #008000;">
<span style="color: #008000;">Python调用这个init()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身<span style="color: #008000;">
<span style="color: #008000;">的引用, 让实例能够访问类中的属性和方法。 我们创建Dog 实例时,Python将调用Dog类的方法init() 。 <span style="color: #008000;">
<span style="color: #008000;">我们将通过实参向Dog()传递名字和年龄;self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最后两个形参(name 和age )提供值。
<span style="color: #008000;">#
<span style="color: #008000;">2.根据类创建实例my_dog = Dog(<span style="color: #800000;">'<span style="color: #800000;">willie<span style="color: #800000;">',6<span style="color: #000000;">)
<span style="color: #0000ff;">print(<span style="color: #800000;">"<span style="color: #800000;">My dog's name is <span style="color: #800000;">" + my_dog.name.title() + <span style="color: #800000;">"<span style="color: #800000;"> and he is <span style="color: #800000;">"+ str(my_dog.age) + <span style="color: #800000;">"<span style="color: #800000;"> years old.<span style="color: #800000;">"<span style="color: #000000;">)
<span style="color: #008000;">#<span style="color: #008000;">访问属性 .
<span style="color: #000000;">my_dog.name
<span style="color: #008000;">#<span style="color: #008000;">调用方法
<span style="color: #000000;">my_dog.sit()
<span style="color: #008000;">#<span style="color: #008000;">创建多个实例
my_dog = Dog(<span style="color: #800000;">'<span style="color: #800000;">willie<span style="color: #800000;">',6<span style="color: #000000;">)
your_dog = Dog(<span style="color: #800000;">'<span style="color: #800000;">lucy<span style="color: #800000;">',7<span style="color: #000000;">)
<span style="color: #008000;">#<span style="color: #008000;">9.2使用类和实例<span style="color: #008000;">
<span style="color: #008000;">1.Car类
<span style="color: #0000ff;">class<span style="color: #000000;"> Car():
<span style="color: #800000;">"""<span style="color: #800000;">一次模拟汽车的简单尝试<span style="color: #800000;">"""
<span style="color: #0000ff;">def <span style="color: #800080;">init<span style="color: #000000;">(self,make,model,year):
<span style="color: #800000;">"""<span style="color: #800000;">初始化描述汽车的属性<span style="color: #800000;">"""<span style="color: #000000;">
self.make =<span style="color: #000000;"> make
self.model =<span style="color: #000000;"> model
self.year =<span style="color: #000000;"> year
<span style="color: #008000;">#<span style="color: #008000;">添加属性odometer_reading,并设置默认值为0
self.odometer_reading =<span style="color: #000000;"> 0
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> get_odometer(self):
</span><span style="color: #0000ff;">print</span>(<span style="color: #800000;">"</span><span style="color: #800000;">This car has </span><span style="color: #800000;">"</span> + str(self.odometer_reading) + <span style="color: #800000;">"</span><span style="color: #800000;"> miles on it.</span><span style="color: #800000;">"</span><span style="color: #000000;">)
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> set_odometer(self,mileage):
self.odometer_reading </span>=<span style="color: #000000;"> mileage
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> get_descriptive_name(self):
</span><span style="color: #800000;">"""</span><span style="color: #800000;">返回整洁的描述性信息</span><span style="color: #800000;">"""</span><span style="color: #000000;">
long_name </span>= str(self.year) + <span style="color: #800000;">'</span> <span style="color: #800000;">'</span> + self.make + <span style="color: #800000;">'</span> <span style="color: #800000;">'</span> +<span style="color: #000000;"> self.model
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> long_name.title()
my_new_car = Car(<span style="color: #800000;">'<span style="color: #800000;">Audi<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">A4L<span style="color: #800000;">',2016<span style="color: #000000;">)
<span style="color: #0000ff;">print<span style="color: #000000;">(my_new_car.get_descriptive_name())
my_new_car.get_odometer()
<span style="color: #008000;">#<span style="color: #008000;">2.给属性指定默认值
<span style="color: #008000;">#<span style="color: #008000;">3.修改属性的值<span style="color: #008000;">
<span style="color: #008000;">直接修改
my_new_car.odometer_reading = 23<span style="color: #000000;">
my_new_car.get_odometer()
<span style="color: #008000;">#<span style="color: #008000;">通过方法修改<span style="color: #008000;">
<span style="color: #008000;">def set_odometer(self,mileage)
my_new_car.set_odometer(35<span style="color: #000000;">)
my_new_car.get_odometer()
<span style="color: #008000;">#<span style="color: #008000;">9.3继承<span style="color: #008000;">
<span style="color: #008000;">创建子类的时候,父类必须包含在当前文件中,且位于子类的前面。<span style="color: #008000;">
<span style="color: #008000;">定义子类的时候,必须在括号内指定父类的名称。<span style="color: #008000;">
<span style="color: #008000;">方法init()接受创建Car实例所需的信息<span style="color: #008000;">
<span style="color: #008000;">super()帮助Python将父类和子类关联起来。
<span style="color: #0000ff;">class<span style="color: #000000;"> Battery():
</span><span style="color: #0000ff;">def</span> <span style="color: #800080;">__init__</span>(self,battery_size=70<span style="color: #000000;">):
self.battery_size </span>=<span style="color: #000000;"> battery_size
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> describe_battery(self):
</span><span style="color: #0000ff;">print</span>(<span style="color: #800000;">"</span><span style="color: #800000;">This car has a </span><span style="color: #800000;">"</span>+ str(self.battery_size) + <span style="color: #800000;">"</span><span style="color: #800000;">-KWh battery.</span><span style="color: #800000;">"</span><span style="color: #000000;">)
<span style="color: #008000;">#<span style="color: #008000;">1.子类的方法init()
<span style="color: #0000ff;">class<span style="color: #000000;"> ElectricCar(Car):
</span><span style="color: #0000ff;">def</span> <span style="color: #800080;">__init__</span><span style="color: #000000;">(self,year):
super().</span><span style="color: #800080;">__init__</span><span style="color: #000000;">(make,year)
self.battery_size </span>= 70<span style="color: #000000;">
self.battery </span>=<span style="color: #000000;"> Battery()
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> describe_battery(self):
</span><span style="color: #0000ff;">print</span>(<span style="color: #800000;">"</span><span style="color: #800000;">This car has a </span><span style="color: #800000;">"</span> + str(self.battery_size) + <span style="color: #800000;">"</span><span style="color: #800000;">-KWh battery.</span><span style="color: #800000;">"</span><span style="color: #000000;">)
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> fill_gas_tank(self):
</span><span style="color: #0000ff;">print</span>(<span style="color: #800000;">"</span><span style="color: #800000;">This car doesn't need a gas tank!</span><span style="color: #800000;">"</span><span style="color: #000000;">)
my_tesla = ElectricCar(<span style="color: #800000;">'<span style="color: #800000;">teala<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">model s<span style="color: #800000;">',2016<span style="color: #000000;">)
<span style="color: #0000ff;">print<span style="color: #000000;">(my_tesla.get_descriptive_name())
<span style="color: #008000;">#<span style="color: #008000;">2.给子类定义属性和方法
<span style="color: #000000;">my_tesla.describe_battery()
<span style="color: #008000;">#<span style="color: #008000;">3.重写父类的方法:取其精华,去其糟粕<span style="color: #008000;">
<span style="color: #008000;">def fill_gas_tank(self):
<span style="color: #000000;">my_tesla.fill_gas_tank()
<span style="color: #008000;">#<span style="color: #008000;">4.将实例用作属性<span style="color: #008000;">
<span style="color: #008000;">class Battery():
<span style="color: #000000;">my_tesla.battery.describe_battery()
<span style="color: #008000;">#<span style="color: #008000;">9.4导入类<span style="color: #008000;">
<span style="color: #008000;">1.导入单个类<span style="color: #008000;">
<span style="color: #008000;">打开模块dog(这里我为了方便在dog.py中写的内容),并导入其中的Car类
<span style="color: #0000ff;">from dog <span style="color: #0000ff;">import<span style="color: #000000;"> Car
my_new_car = Car(<span style="color: #800000;">'<span style="color: #800000;">audi<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">a4<span style="color: #800000;">',2016<span style="color: #000000;">)
<span style="color: #0000ff;">print<span style="color: #000000;">(my_new_car.get_descriptive_name())
<span style="color: #008000;">#<span style="color: #008000;">在一个模块中存储多个类:直接在模块中编写多个类
<span style="color: #008000;">#<span style="color: #008000;">从一个模块中导入多个类
<span style="color: #0000ff;">from dog <span style="color: #0000ff;">import<span style="color: #000000;"> Car,Battery
<span style="color: #008000;">#<span style="color: #008000;">导入整个模块
<span style="color: #0000ff;">import<span style="color: #000000;"> dog
<span style="color: #008000;">#<span style="color: #008000;">导入模块中的所有类<span style="color: #008000;">
<span style="color: #008000;">from module_name import *
<span style="color: #008000;">#<span style="color: #008000;">在一个模块中导入另一个模块
<span style="color: #008000;">#<span style="color: #008000;">9.5Python标准库
<span style="color: #008000;">#<span style="color: #008000;">9.6类编码风格<span style="color: #008000;">