• Python基础-9-类


    一:创建和使用类

    1、创建Dog类

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

    方法__init__()

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

    1. class Dog:
    2. def __init__(self, name, age):
    3. self.name = name
    4. self.age = age
    5. def sit(self):
    6. print(f"{self.name} is now sitting.")
    7. def roll_over(self):
    8. print(f"{self.name} rolled over!")

    2、根据类创建实例

    1. my_dog = Dog('Willie', 6)
    2. print(f"My dog's name is {my_dog.name}.")
    3. print(f"My dog is {my_dog.age} years old.")
    4. # RESULT
    5. '''
    6. My dog's name is Willie.
    7. My dog is 6 years old.
    8. '''

    (1)访问属性

    my_dog.name

    (2)调用方法

    1. my_dog.sit()
    2. my_dog.roll_over()
    3. # RESULT
    4. '''
    5. Willie is now sitting.
    6. Willie rolled over!
    7. '''

    二:使用类和实例

    1、Car类

    1. class Car:
    2. def __init__(self, make, model, year):
    3. self.make = make
    4. self.model = model
    5. self.year = year
    6. def get_descriptive(self):
    7. long_name = f"{self.year} {self.make} {self.model}"
    8. return long_name.title()
    9. my_new_car = Car('audi', 'a4', 2019)
    10. print(my_new_car.get_descriptive())
    11. # RESULT
    12. '''
    13. 2019 Audi A4
    14. '''

    2、给属性制定默认值

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

    3、修改属性值

    (1)直接修改属性值

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

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

    1. class Car:
    2. def __init__(self, make, model, year):
    3. self.odometer_reading = 0
    4. self.make = make
    5. self.model = model
    6. self.year = year
    7. def update_odometer(self, mileage):
    8. self.odometer_reading = mileage
    9. my_new_car = Car('audi', 'a4', 2019)
    10. my_new_car.update_odometer(20)

    三:继承

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

    1、子类的方法__init__()

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

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

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

    1. class Car:
    2. def __init__(self, make, model, year):
    3. self.odometer_reading = 0
    4. self.make = make
    5. self.model = model
    6. self.year = year
    7. def get_descriptive(self):
    8. long_name = f"{self.year} {self.make} {self.model} {self.odometer_reading}"
    9. return long_name.title()
    10. def update_odometer(self, mileage):
    11. self.odometer_reading = mileage
    12. class ElecCar(Car):
    13. def __init__(self, make, model, year):
    14. super().__init__(make, model, year)
    15. my_tesla = ElecCar('tesla', 'model s', '2022')
    16. print(my_tesla.get_descriptive())
    17. # RESULT
    18. '''
    19. 2022 Tesla Model S 0
    20. '''

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

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

    1. class ElecCar(Car):
    2. def __init__(self, make, model, year):
    3. super().__init__(make, model, year)
    4. self.battery_size = 75
    5. def describe_battery(self):
    6. print(f"This car has a {self.battery_size}-KWh battery.")
    7. my_tesla = ElecCar('tesla', 'model s', '2022')
    8. print(my_tesla.get_descriptive())
    9. my_tesla.describe_battery()

    3、重写父类的方法

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

    1. class Car:
    2. def __init__(self, make, model, year):
    3. self.odometer_reading = 0
    4. self.make = make
    5. self.model = model
    6. self.year = year
    7. def fill_gas_tank(self):
    8. print("This car need a gas tank!")
    9. class ElecCar(Car):
    10. def __init__(self, make, model, year):
    11. super().__init__(make, model, year)
    12. self.battery_size = 75
    13. def fill_gas_tank(self):
    14. print("This car doesn't need a gas tank!")
    15. my_car = Car('audi', 'a6', '2022')
    16. my_car.fill_gas_tank()
    17. my_tesla = ElecCar('tesla', 'model s', '2022')
    18. my_tesla.fill_gas_tank()
    19. # RESULT
    20. '''
    21. This car need a gas tank!
    22. This car doesn't need a gas tank!
    23. '''

    4、将实例用作属性

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

    1. class Battery:
    2. def __init__(self, battery_size=75):
    3. self.battery_size = battery_size
    4. def describe_battery(self):
    5. print(f"This car has a {self.battery_size}-KWh battery.")
    6. class ElecCar(Car):
    7. def __init__(self, make, model, year):
    8. super().__init__(make, model, year)
    9. self.battery = Battery()
    10. my_tesla = ElecCar('tesla', 'model s', '2022')
    11. my_tesla.battery.describe_battery()
    12. # RESULT
    13. '''
    14. This car has a 75-KWh battery.
    15. '''

    四:导入类

    1、导入单个类

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

    1. # car.py
    2. class Car:
    3. def __init__(self, make, model, year):
    4. self.make = make
    5. self.model = model
    6. self.year = year
    7. def get_descriptive(self):
    8. long_name = f"{self.year} {self.make} {self.model}"
    9. return long_name.title()
    1. # my_car.py
    2. from car import Car
    3. my_new_car = Car('audi', 'a4', 2022)
    4. print(my_new_car.get_descriptive())
    5. # RESULT
    6. '''
    7. 2022 Audi A4
    8. '''

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

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

    1. # car.py
    2. class Car:
    3. def __init__(self, make, model, year):
    4. self.make = make
    5. self.model = model
    6. self.year = year
    7. def get_descriptive(self):
    8. long_name = f"{self.year} {self.make} {self.model}"
    9. return long_name.title()
    10. class Battery:
    11. def __init__(self, battery_size=75):
    12. self.battery_size = battery_size
    13. def describe_battery(self):
    14. print(f"This car has a {self.battery_size}-KWh battery.")
    15. class ElecCar(Car):
    16. def __init__(self, make, model, year):
    17. super().__init__(make, model, year)
    18. self.battery = Battery()
    1. # my_car.py
    2. from car import Car, ElecCar
    3. my_car = Car('audi', 'a4', 2022)
    4. print(my_car.get_descriptive())
    5. my_tesla = ElecCar('tesla', 'roadster', '2022')
    6. print(my_tesla.get_descriptive())
    7. # RESULT
    8. '''
    9. 2022 Audi A4
    10. 2022 Tesla Roadster
    11. '''

    3、导入整个模块

    1. import car
    2. my_car = car.Car('audi', 'a4', 2022)
    3. print(my_car.get_descriptive())
    4. my_tesla = car.ElecCar('tesla', 'roadster', 2022)
    5. print(my_tesla.get_descriptive())

    4、导入模块中的所有类

    from module_name import *
    1. from car import *
    2. my_car = Car('audi', 'a4', 2022)
    3. print(my_car.get_descriptive())
    4. my_tesla = ElecCar('tesla', 'roadster', 2022)
    5. print(my_tesla.get_descriptive())
    6. print(my_tesla.battery.describe_battery())
    7. # RESULT
    8. '''
    9. 2022 Audi A4
    10. 2022 Tesla Roadster
    11. This car has a 75-KWh battery.
    12. None
    13. '''

  • 相关阅读:
    卷积神经网络补充
    深入源码剖析ThreadPoolExecutor的工作原理
    rabbitmq消息投递失败
    MATLAB基础学习笔记
    深度学习——几种学习类型
    fastadmin/thinkPHPQueue消息队列详细教程
    Vue.js 的事件循环(Event Loop)机制
    A股上市公司MSCI指数和ESG评级效果(2010-2021年)
    互换性与测量技术基础复习题及答案
    asp.net老年大学信息VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计
  • 原文地址:https://blog.csdn.net/qq_34968572/article/details/128178082