《Python编程:从入门到实践》第九章笔记

9.1 创建和使用类

9.1.1 创建Dog类

class Dog():
    def __init__(self,name,age): #3
        """初始化属性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!")
1.方法__init__()

类中的函数称为方法,3处的方法__init__()是一个特殊的方法,每当你根据类创建新实例时,Python都会自动运行它。该方法中包含三个self、name和age,在方法的定义中,形参self必不可少,还必须位于其他形参的前面。当Python调用__init__()方法创建实例时,每个类中的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

9.1.2 根据类创建实例

my_dog = Dog("willile",6)
1.访问属性
my_dog.name
2.调用方法
my_dog.sit()

9.2 使用类和实例

9.2.1 Car类

class Car():
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year = year
    
    def get_name(self):
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name

car = Car("audi","a4",2016)
print(car.get_name())

2016 audi a4

9.2.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_name(self):
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name

9.2.3 修改属性的值

1.直接修改属性的值
car.name = "jiayu"
2.通过方法修改属性的值
def update_odometer(self,mileage):
	self.odometer = mileage

9.3 继承

一个类继承另一个类时,它将自动获得另一个类的所有属性和方法:原有的类称为父类,而新类称为子类

9.3.1 子类的方法__init__()

class Car():
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year = year
    
    def get_name(self):
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name

class ElectricCar(Car):
	def __init__(self,make,model,year):
		super().__init__(make,model,year)

tesla = ElectricCar('tesla','s',2016)

创建子类时,父类必须包含于当前文件中,且位于子类前面。定义子类时,必须在括号内知名父类的名称。super()是一个特殊函数,帮助Python将父类与子类关联起来,让Python调用父类的方法__init__(),让ElectricCar实例包含父类的所有属性。父类也称为超类(superclass),名称super因此而得名。

9.3.3 给子类定义属性和方法

class ElectricCar(Car):
	def __init__(self,make,model,year):
		super().__init__(make,model,year)
		self.battery_size = 70
	
	def describe_battery(self):
		print(self.battery_size)

9.3.4 重写父类的方法

对于父类的方法,可根据子类的行为对其进行重写,在子类中定义一个这样的方法,要与重写的父类方法同名。这样Python将不会考虑父类方法,而只关注子类中定义的相应方法。

def fill_gas_tank():
	print("no gas tank!")

9.3.5 将实例作为属性1

可将一个完整的类作为另一个类的属性

self.battery = Battery()

9.4 导入类

将Car类的定义写在car.py文件中

9.4.1 导入单个类

from car import Car

9.4.2 在一个模块中存储多个类

将互相有关联的类都加入模块car.py中,新建一个文件,导入ElectricCar类:

from car import ElectricCar

9.4.3 从一个模块导入多个类

from car import Car,ElectricCar

9.4.4 导入整个模块

import car

9.4.5 导入模块中的所有类

from module_name import *

9.4.6 在一个模块中导入另一个模块

有时候,需要将类分散到多个模块中,当一个模块中的类依赖于另一个模块中的类,这种情况下,可在前一个模块中导入必要的类

from car import Car
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值