Python基础-9-类

一:创建和使用类

1、创建Dog类

根据Dog类创建的每个实例都将存储名字和年龄及行为能力,根据Python约定,首字母大写的名称指的是类。这个类定义中没有圆括号,因为要从空白创建这个类。

方法__init__()

类中的函数称为方法,方法__init__()是一个特殊方法,当类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和结尾各有两个下划线,旨在避免Python默认方法和普通方法发生名称冲突。在__init__()方法定义中形参self必不可少,而且必须位于其他形参的前面,Python在调用这个方法创建实例时,将自动传入实参self。每个与实例相关关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

class Dog:
    def __init__(self, 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!")

2、根据类创建实例

my_dog = Dog('Willie', 6)
print(f"My dog's name is {my_dog.name}.")
print(f"My dog is {my_dog.age} years old.")

# RESULT
'''
My dog's name is Willie.
My dog is 6 years old.
'''

(1)访问属性

my_dog.name

(2)调用方法

my_dog.sit()
my_dog.roll_over()

# RESULT
'''
Willie is now sitting.
Willie rolled over!
'''

二:使用类和实例

1、Car类

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

    def get_descriptive(self):
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive())


# RESULT
'''
2019 Audi A4
'''

2、给属性制定默认值

def __init__(self, make, model, year):
    self.odometer_reading = 0

3、修改属性值

(1)直接修改属性值

my_new_car = Car('audi', 'a4', 2019)
my_new_car.odometer_reading = 20

(2)通过方法修改属性值

class Car:
    def __init__(self, make, model, year):
        self.odometer_reading = 0
        self.make = make
        self.model = model
        self.year = year

    def update_odometer(self, mileage):
        self.odometer_reading = mileage

my_new_car = Car('audi', 'a4', 2019)
my_new_car.update_odometer(20)

三:继承

编写类时,并非总是要从空白开始。如果要编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,将自动获得另一个类的所有属性和方法。原有的类称为父类,而新的类称为子类。子类继承父类的所有属性和方法,同时还可以定义自己的属性和方法。

1、子类的方法__init__()

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

创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,必须在圆括号内指定父类的名称。方法__init__()接受创建Car实例所需的信息。

super()是一个特殊函数,让你能够调用父类的方法。

class Car:
    def __init__(self, make, model, year):
        self.odometer_reading = 0
        self.make = make
        self.model = model
        self.year = year

    def get_descriptive(self):
        long_name = f"{self.year} {self.make} {self.model} {self.odometer_reading}"
        return long_name.title()

    def update_odometer(self, mileage):
        self.odometer_reading = mileage

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

my_tesla = ElecCar('tesla', 'model s', '2022')
print(my_tesla.get_descriptive())

# RESULT
'''
2022 Tesla Model S 0
'''

2、给子类定义属性和方法

让一个类继承另一个类后,就可以添加区分子类和父类所需的新属性和方法。

class ElecCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery_size = 75
    def describe_battery(self):
        print(f"This car has a {self.battery_size}-KWh battery.")


my_tesla = ElecCar('tesla', 'model s', '2022')
print(my_tesla.get_descriptive())
my_tesla.describe_battery()

3、重写父类的方法

对于父类的方法,只要它不符合子类模拟的实物行为,都可以进行重写。为此,可在子类中定义一个与要重写的父类的方法同名的方法即可。

class Car:
    def __init__(self, make, model, year):
        self.odometer_reading = 0
        self.make = make
        self.model = model
        self.year = year

    def fill_gas_tank(self):
        print("This car need a gas tank!")  

class ElecCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery_size = 75

    def fill_gas_tank(self):
        print("This car doesn't need a gas tank!")

my_car = Car('audi', 'a6', '2022')
my_car.fill_gas_tank()
my_tesla = ElecCar('tesla', 'model s', '2022')
my_tesla.fill_gas_tank()

# RESULT
'''
This car need a gas tank!
This car doesn't need a gas tank!
'''

4、将实例用作属性

在具有针对性的属性和方法中,可以将这些提取出来,放到一个新类中,并将这个新类的实例作为属性传递给其他类使用。

class Battery:
    def __init__(self, battery_size=75):
        self.battery_size = battery_size
    def describe_battery(self):
        print(f"This car has a {self.battery_size}-KWh battery.")

class ElecCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = Battery()

my_tesla = ElecCar('tesla', 'model s', '2022')
my_tesla.battery.describe_battery()


# RESULT
'''
This car has a 75-KWh battery.
'''

四:导入类

1、导入单个类

使用import语句让Python打开模块car并导入其中的Car类。

# car.py

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

    def get_descriptive(self):
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()
# my_car.py

from car import Car

my_new_car = Car('audi', 'a4', 2022)
print(my_new_car.get_descriptive())

# RESULT
'''
2022 Audi A4
'''

2、在一个模块中存储多个类,导入多个类

可根据需要在程序文件中导入任意数量的类。导入时用逗号分隔各个类,导入必要的类后,可根据需要创建每个类的任意数量实例。

# car.py

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

    def get_descriptive(self):
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

class Battery:
    def __init__(self, battery_size=75):
        self.battery_size = battery_size
    def describe_battery(self):
        print(f"This car has a {self.battery_size}-KWh battery.")
        
class ElecCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = Battery()
# my_car.py

from car import Car, ElecCar

my_car = Car('audi', 'a4', 2022)
print(my_car.get_descriptive())
my_tesla = ElecCar('tesla', 'roadster', '2022')
print(my_tesla.get_descriptive())

# RESULT
'''
2022 Audi A4
2022 Tesla Roadster
'''

3、导入整个模块

import car

my_car = car.Car('audi', 'a4', 2022)
print(my_car.get_descriptive())
my_tesla = car.ElecCar('tesla', 'roadster', 2022)
print(my_tesla.get_descriptive())

4、导入模块中的所有类

from module_name import *
from car import *

my_car = Car('audi', 'a4', 2022)
print(my_car.get_descriptive())
my_tesla = ElecCar('tesla', 'roadster', 2022)
print(my_tesla.get_descriptive())
print(my_tesla.battery.describe_battery())

# RESULT
'''
2022 Audi A4
2022 Tesla Roadster
This car has a 75-KWh battery.
None
'''

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值