python学习8:类

python学习8:类

1 创建和使用类

1.1 创建Dog类

根据Dog类创建的每个实例都将存储名字和年龄,我们赋予每条小狗蹲下sit()和打滚roll_over()的能力:

class Dog:
    """一次模拟小狗的简单尝试。"""

    def __init__(self, name, age):
        """初始化属性name和age"""
        self.name = name
        self.age = age

    def sit(self):
        """模拟小狗收到命令时蹲下"""
        print(f"{self.name} is now sitting.")

    def roll_over(self):
        """模拟小狗收到命令时打滚"""
        print(f"{self.name} rolled over!")
  • 根据约定,在Python中,首字母大写的名称指的是类
  • 方法__init__():类中的函数称为方法。 而__init__()是一个特殊的方法,每次根据Dog类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线。
  • 这个方法的定义中形参self必不可少,而且必须位于其他形参的前面。每个与实例相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
  • 以self为前缀的变量可供类中的所有方法使用,可以通过类的任何实例来访问。
  • Dog类还定义了另两个方法:sit()roll_over()。这些方法执行时不需要额外的信息,因此他们只有一个形参self。

1.2 根据类创建实例

可将类视作有关如何创建实例的说明。Dog类是一系列说明,让python知道如何创建表示特定小狗的实例。

my_dog = Dog('Willie', 6)
print(f"My dog's name is {my_dog.name}.")
print(f"My dog is {my_dog.age} year old.")
my_dog.sit()
my_dog.roll_over()
结果:
My dog's name is Willie.
My dog is 6 year old.
Willie is now sitting.
Willie rolled over!

2 使用类和实例

类编写好后,大部分时间将花在根据类创建的实例上。需要执行的一个重要任务是修改实例的属性。

2.1 Car类

下面编写一个表示汽车的类。

class Car:
    """a simple attempt to simulate a car"""

    def __init__(self, make, model, year):
        """initialize the attributes that describe the car"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0

    def get_descriptive_name(self):
        """return neat descriptive information"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

    def read_odometer(self):
        """print a message indicating car odometer"""
        print(f"This car has {self.odometer_reading} miles on it.")


my_new_car = Car('audi', 'a4', 2019)

print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()

一开始汽车的里程为0:

2019 Audi A4
This car has0 miles on it.

2.2 修改属性的值

  1. 直接修改属性的值
    通过实例直接访问,使用句点表示法直接访问并设置汽车的属性odometer_reading
class Car:
	--snip--
my_new_car = Car('audi', 'a4', 2019)

print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
  1. 通过方法修改属性的值
    将值传递给方法,由其在内部进行更新。
class Car:
	--snip--
	def update_odometer(self,mileage):
	"""set the odometer reading to the specified value"""
        self.odometer_reading = mileage


my_new_car = Car('audi', 'a4', 2019)

print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(23)
my_new_car.read_odometer()

添加了方法update_odometer()。该方法接受一个里程值,并赋值给self.odometer_reading
以上方法结果均为:

2019 Audi A4
This car has 23 miles on it.

3 继承

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

3.1 子类的方法__init__()

在原有类的基础上编写新类时,通常要调用父类的方法__init__()。这将初始化在父类__init__()方法中定义的所有属性,从而让子类包含这些属性。

class Car:
    """a simple attempt to simulate a car"""

    def __init__(self, make, model, year):
        """initialize the attributes that describe the car"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0

    def get_descriptive_name(self):
        """return neat descriptive information"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

    def read_odometer(self):
        """print a message indicating car odometer"""
        print(f"This car has {self.odometer_reading} miles on it.")

    def update_odometer(self, mileage):
        """set the odometer reading to the specified value"""
        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 += miles


class ElectricCar(Car):
    """the uniqueness of electric vehicles"""

    def __init__(self, make, model, year):
        """initialize the properties of the parent class"""
        super().__init__(make, model, year)


my_tesla = ElectricCar('tesla', 'model s', 2019)

print(my_tesla.get_descriptive_name())
  • 其中super()是一个特殊的函数,让你可以调用父类的方法。这行代码让python调用car类的方法__init__(),让electriccar实例包含这个方法中定义的所有属性。

4 导入类

4.1 导入单个类

from car import Car

my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()

import让python打开模块car导入其中的Car类。

4.2 导入多个类

from car import Car, ElectriCar

4.3 导入整个模块

import car

5 python标准库

熟悉并利用好python中的标准库是必要的。

6 参考文献

python从入门到实践

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值