用人话概况Python基础(六):类的定义使用、类的继承和导入

用人话概况Python基础(六):类的定义使用、类的继承和导入

面向对象编程最重要的概念就是类和实例。根据类来创建对象被称为实例化,通过这种方式我们就可以使用类的实例了。

类的创建和使用

类是由关键字class、类名()、冒号和类中各种方法和属性构成的。

关于命名,我们通常认为首字母大写的名称指的是类

#coding=gbk
'''描述Cat的基本信息'''
class Cat():
	def __init__(self,name,age):
		self.name = name 
		self.age = age
	
	def msg(self):
		print('Name:'+self.name.title())
		print('Age:'+str(self.age))

cat_1 = Cat('lisa',6)		
cat_2 = Cat('sir',3)
cat_1.msg()
cat_2.msg()

#编译执行结果
Name:Lisa
Age:6
Name:Sir
Age:3

案例分析:
①我们在编写一个类时,我们应该写一个文档字符串,用来描述该类的功能。eg:【’’‘描述Cat的基本信息’’’】
②在编写类时,都会有一个特殊方法__init__方法是必须要写的,这个方法是用来初始化数据的,且该方法的第一个参数永远self,表示指向创建实例本身or指向实例本身的引用,这个self可以让实例能够访问类中的属性和方法。
③每个属性(name,age)在创建时必须初始化,如【self.name = name、 self.age = age】
④属性的初始化和运用我们需要利用self,可以理解为属性都被self绑在了一起。eg:【self.name、self.age、self.name.title()等】
⑤方法之间应有空行,使得代码清晰易读
根据类创建的对象称为实例,也就是案例中的cat_1和cat_2,并且我们可以根据需求创建多个实例
⑦实例可以直接调用类中的方法,调用方式如【cat_1.msg()、cat_2.msg()】

类的继承

在编写类的时候,不是每次都要从头开始写。假如我们编写的类是另一个类的特殊情况的话,我们可以采用继承的方式,当一个类继承另一个类时,将自动获取拥有另一个类的所有方法和属性。
我们将原有的类称为父类(超类),新类称为子类,子类除了继承父类的所有属性和方法外,还可以自己定义方法和属性,甚至根据需求可以修改覆盖父类的方法和属性

#coding=gbk
'''描述Animal的基本信息'''
class Animal():
	def __init__(self,name,age):
		self.name = name 
		self.age = age
	
	def msg(self):
		print('Name:'+self.name.title())
		print('Age:'+str(self.age))
'''继承Animal,并添加毛发颜色信息'''	
class Cat(Animal):
	def __init__(self,name,age):
		super().__init__(name,age)
		self.fur = 'black'
		
	def fur_color(self):
		print('The color:'+self.fur.title())

cat_1 = Cat('xiaohei',6)
cat_1.msg()
cat_1.fur_color()

#案例结果
Name:Xiaohei
Age:6
The color:Black

案例分析:
①此处有两个类Animal和Cat,并且类Cat继承了类Animal,也就是类Animal是类Cat的父类(超类)
②通过案例易知,定义子类时,需将父类的名称写入括号中
③子类继承父类后,在__init__方法中需要接受父类的相关属性,并且我们需要使用特殊函数super()来将父类和子类相关联起来【super(). __init __(name,age)】
④子类可以定义新属性【self.fur = ‘black’】
⑤子类可以定义新方法【def fur_color(self):】
⑥通过子类创建对象实例【cat_1 = Cat(‘xiaohei’,6)】
⑦子类创建的实例可以调用父类和子类中的方法【cat_1.msg()、cat_1.fur_color()】

类的导入

我们常利用编写类将数据封装起来,我们只需要知道某模块中的类功能是什么以及如何使用这个类,便可以利用导入模块中的类的方式,在其它模块中直接使用这些类了

我们需要将不同的模块放置于同一文件夹中,案例test.py和main.py就处于同一文件夹中

利用import语句导入文件:from 文件名 import 类名(类名可以是多个,即导入多个类)

导入的方式规则和用人话概况Python基础(五):函数中介绍函数的三种导入方式一样,此处不作过多说明,但不建议使用星号(*)一次性将所有类导入的方式

文件名:test.py
#coding=gbk
'''描述Animal的基本信息'''
class Animal():
	def __init__(self,name,age):
		self.name = name 
		self.age = age
	
	def msg(self):
		print('Name:'+self.name.title())
		print('Age:'+str(self.age))
文件名:main.py
from test import Animal

#直接创建实例并使用即可
cat = Animal('liuliu',8)
cat.msg()

#编译结果
Name:Liuliu
Age:8

类的小扩展

在类(class)内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。

外部代码可以自由地修改类中属性的值,但当我们不想要内部属性被轻易访问和修改时,我们可以通过在属性名前加两个下划线的方法实现,我们将变量名前有两个下划线组成的变量称为私有变量(private)

#对比1
#coding=gbk
'''描述Cat的基本信息'''
class Animal():
	def __init__(self,name,age):
		self.name = name 
		self.age = age
		
	def msg(self):
		print('Name:'+self.name.title())
		print('Age:'+str(self.age))

cat = Animal('dada',5)
age_1 = cat.age

print(age_1)

#编译执行结果
5


------------------
(program exited with code: 0)

请按任意键继续. . .
#对比2
#coding=gbk
'''描述Cat的基本信息'''
class Animal():
	def __init__(self,name,age):
		self.__name = name 
		self.__age = age
		
	def msg(self):
		print('Name:'+self.name.title())
		print('Age:'+str(self.age))

cat = Animal('dada',5)
age_1 = cat.age

print(age_1)

#编译执行结果
Traceback (most recent call last):
  File "number.py", line 13, in <module>
    age_1 = cat.age
AttributeError: 'Animal' object has no attribute 'age'

案例分析:
①通过对比,可以发现这种方法确保了外部代码不能随意访问和修改对象内部的状态,这样通过访问限制的保护

注意事项:

–在Python中变量名前后都是双下划线得,是属于特殊变量,可以直接访问,不是private变量(变量名前有两个下划线)

————————————————————————————————————————————

你的每次点赞和关注,我都认真的当作是喜欢~~~

更多文章点这里

发布了6 篇原创文章 · 获赞 15 · 访问量 909

猜你喜欢

转载自blog.csdn.net/weixin_43856851/article/details/104219221