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
目录
相关文章
|
1月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
17 1
|
1月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
21 2
|
1月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
21 3
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第四章:和你一起你轻松刷题(Python)
这篇博客是关于LeetCode上使用Python语言解决二分查找问题的刷题笔记,涵盖了从基础到进阶难度的多个题目及其解法。
15 0
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第三章:和你一起你轻松刷题(Python)
本文是关于LeetCode算法题的刷题笔记,主要介绍了使用双指针技术解决的一系列算法问题,包括Two Sum II、Merge Sorted Array、Linked List Cycle II等,并提供了详细的题解和Python代码实现。
12 0
|
1月前
|
算法 C++ 索引
Leecode 101刷题笔记之第二章:和你一起你轻松刷题(Python)
本文是关于LeetCode 101刷题笔记的第二章,主要介绍了使用Python解决贪心算法题目的方法和实例。
10 0
|
1月前
|
并行计算 Python
Python错误笔记(一):CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up env
这篇文章讨论了CUDA初始化时出现的未知错误及其解决方案,包括重启系统和安装nvidia-modprobe。
131 0
WK
|
1月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
13 0
|
1月前
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
35 0
|
1月前
|
Python
Python中的类(一)
Python中的类(一)