Python笔记9 类

简介: 本文是作者的Python复习笔记第九篇,深入探讨了Python中的类和面向对象编程。文中详细解释了如何创建类、实例化对象、定义和使用类方法,以及类的继承、重写方法和嵌套类的使用。此外,还讨论了类模块的导入和导出,包括处理类之间的依赖关系。通过示例代码,文章展示了类在Python编程中的应用和重要性。

一、类

通过搭配类与函数,可以写出优美的封装代码
面向对象编程,编写类时,定义了一个大类的对象都有的通用行为

① 创建类

在python中 类的首字母约定俗成为大写
在python2.7中,需要在class Dog(object)中添加object
类中的所有属性在实例化时必须有初始值,可以赋0或者赋空

class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.weight = 0

    def sit(self):
        print(self.name.title() + " is sitting now.")

    def roll_over(self):
        print(self.name.title() + " rolled over!")

    def show_weight(self):
        print(self.weight)

    def update_weight(self,weight):
        self.weight = weight

1.方法

类中的函数被称作方法
__init__是一个特殊的方法,带下划线是因为要避免和普通方法起冲突,在每个类开头都需要写这个
self为指向实例本身的引用,是自动传入参数,在类中,可以通过调用self来访问类中的属性和方法

② 根据类创建实例

类是一类事物的通用模型,可以通过通用模型来创造具体的个体

1.创建实例

可以通过类创建一系列的有相同属性与行为特征的类,比如斑点狗与田园犬

my_dog = Dog("Hans", 8)
print("My dog's name is " + my_dog.name.title() + " and its age is " + str(my_dog.age) + " years old.")

2.访问实例的属性、方法(函数)

实例有它的属性以及一些内置在类,为实例所拥有的方法(函数)

print(my_dog.name)
my_dog.sit()

3.修改属性

直接修改属性值

my_dog.weight = 30
print(my_dog.weight)

通过方法(类内函数)修改属性
这样可以方便对一些不合理的调整属性的命令,使之不能直接修改属性而需要通过方法,在方法中对修改值作限制

def update_weight(self,weight):
    self.weight = weight

二、类的继承

类可以有它的父类,子类继承了父类的所有属性与方法,同时还有自己的属性和方法
首先需要在定义子类的括号中添加父类作为参数,因为__init__方法会用到父类的信息
父类也被称为超类(super class),super()用于联系父类和子类

① 类继承的基本模式

class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.weight = 0

    def sit(self):
        print(self.name.title() + " is sitting now.")

    def roll_over(self):
        print(self.name.title() + " rolled over!")

    def show_weight(self):
        print(self.weight)

    def update_weight(self,weight):
        self.weight = weight


class ChinesePastoralDog(Dog):
    def __init__(self, name, age):
        super().__init__(name, age)
        self.color = "Blue"

    def show_color(self):
        print(self.color)

my_dog = Dog("Hans", 8)
print("My dog's name is " + my_dog.name.title() + " and its age is " + str(my_dog.age) + " years old.")
herman_dog = ChinesePastoralDog("puper", 23)
herman_dog.show_color()

② 重写父类的方法

父类的一些方法在子类中是无效的,比如汽车需要加油,而电动汽车不需要
在子类中以父类方法同样的名称,对代码进行重写

def roll_over(self):
    print(" ChinesePastoralDog can not roll over!")

herman_dog.roll_over()
 ChinesePastoralDog can not roll over!

③ 类的嵌套:将类生成的实例用作另一个类的属性

在中华田园犬类外,另设了一个类专门用于毛色属性与毛色相关的方法,将毛色的类实例化,并将这个实例作为中华田园犬类中的一个属性,相当于类的嵌套

class ChinesePastoralDog(Dog):
    def __init__(self, name, age):
        super().__init__(name, age)
        self.color = Color()

    def color_about(self):
        self.color.present_color()

    def roll_over(self):
        print("CPD can not roll over!")

class Color():
    def __init__(self, color="Blue"):
        self.color = color

    def present_color(self):
        print(self.color)

herman_dog = ChinesePastoralDog("puper", 23)
herman_dog.color_about()

三、类模块的导入与导出

类可以单独作为一个模块,也可以多个类放在同一个模块里,处理方式与函数的模块导入导出类似
以Class_Car.py文件作为Car类及其子类的模块为例子,其中有子类 Electric Car 和 Fuel Car

① 类模块的导出

和函数一样,在定义完后保存在.py文件中

② 从类模块中调用类

调用Car类:

from Class_Car import Car

调用ElectricCar类:

from Class_Car import ElectricCar

③ 从类模块中调用多个类

调用ElectricCar类与 FuelCar类

from Class_Car import ElectricCar, FuelCar

调用Class_car.py模块文件下的所有类

import Class_Car

④ 类模块间有依赖关系的处理

当Car与Electric Car分别保存在不同模块时,如果调用Electric Car,也就是Car的子类,需要先从另一个模块调用它的父类Car

from Class_Car import Car
from Class_ElectricCar import ElectricCar
目录
相关文章
|
26天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
102 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
4月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
49 2
|
4月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
45 1
|
4月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
42 3
|
4月前
|
算法 C++ Python
Leecode 101刷题笔记之第四章:和你一起你轻松刷题(Python)
这篇博客是关于LeetCode上使用Python语言解决二分查找问题的刷题笔记,涵盖了从基础到进阶难度的多个题目及其解法。
36 0
|
4月前
|
算法 C++ Python
Leecode 101刷题笔记之第三章:和你一起你轻松刷题(Python)
本文是关于LeetCode算法题的刷题笔记,主要介绍了使用双指针技术解决的一系列算法问题,包括Two Sum II、Merge Sorted Array、Linked List Cycle II等,并提供了详细的题解和Python代码实现。
33 0
|
4月前
|
算法 C++ 索引
Leecode 101刷题笔记之第二章:和你一起你轻松刷题(Python)
本文是关于LeetCode 101刷题笔记的第二章,主要介绍了使用Python解决贪心算法题目的方法和实例。
30 0
|
4月前
|
并行计算 Python
Python错误笔记(一):CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up env
这篇文章讨论了CUDA初始化时出现的未知错误及其解决方案,包括重启系统和安装nvidia-modprobe。
501 0
WK
|
4月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
35 0

热门文章

最新文章