python入门基础(10)–类的创建、使用和继承

在面向对象编程中,先编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。
基于类创建对象时,每个对象都自动具备类的通用行为,同时可根据需要赋予每个对象独特的个性,在实例中存储特定信息及操作
根据类来创建对象被称为实例化
类,也可以用来扩展既有类的功能,让相似的类能够高效地共享代码

一、创建和使用类、实例

编写一个学生的类,含有名字、年龄、年级、家乡等信息,同时定义6个方法,每个方法都是简单地打印相关信息。

class Student():   
    def __init__(self, name, age,grade,hometown):  #任何一个类,此方法必有,方法 __init__() 定义成了包含5个形参: self 、 name , age ,grade 和 hometown
        """ __init__() 是一个特殊的方法,当根据类来创建实例时,Python会自动运行,在这个方法的名称中,开头和末尾各有两个下划线,这是一种约
        定__init__前后是两个短 _ ,并不是一个,且中间没有空格号, self ,是一个指向实例本身的引用,让实例能够访问类中的属性和方法,以 self 为前缀的变量都可
        供类中的所有方法使初始化属性name,age,,grade和hometown"""
        self.name = name   #以 self 为前缀的变量都可供类中的所有方法使用, self.name = name 获取存储在形参 name 中的值,将其存储到变量 name 中,然后该变量被关联到当前创建的实例
        self.age = age     #可通过实例访问的变量称为属性,name,age ,grade 和 hometown 都为类Student的属性
        self.grade = grade #属性self.grade ,同时将形参grade赋值给self.grade
        self.hometown = hometown   #属性hometown   
    def get_name(self):        #定义打印学生名字的一个方法(函数)  """
        print("The student'name is "+self.name.title()+'.')      
    def get_age(self):         #定义打印学生年龄的一个方法(函数)  """
        print("The student is "+str(self.age)+' years old.')      
    def get_grade(self):       #定义打印学生家乡的一个方法  """
        print("The student is grade "+str(self.grade))         
    def get_hometown(self):    #定义打印学生家乡的一个方法  """
        print("The student "+self.name.title()+" is froming "+self.hometown.title())            
    def do_homework(self):      #定义学生的一个方法(函数),做家庭作业"""
        print(self.name.title()+" is doing his homework now !")      
    def play_game(self):        #定义学生做游戏  """
        print(self.name.title()+" is playing game with his friend !")   
        
    def get_student_info(self):   #定义学生的一个方法(函数),打印学生信息"""
        student_info = self.name.title()+' is '+str(self.age)+' years old, and from '+self.hometown +'and  grade'+str(self.grade)
        print(student_info)        
"""实例化,创建两个学生 """        
student_a = Student("jack",13,7,'Newyork') #创建实例 student_a ,具备类Student中的相关参数,并且相关参数与定义中的形参逐一对应,方法 __init__()中的self指的是自身,不需要参数
student_b = Student("huawei",12,7,'wuhai') #创建实例 student_b ,类中的每个属性都必须有初始值,哪怕这个值是0或空字符串,在方法 __init__() 内指定这种初始值是可行的

print("The student is "+student_a.name.title()+'.')  #直接调用实例中的参数
print("The student is "+str(student_a.age)+" years old.") #.title()方法是首字母大写,str()是将数字转为字符串
print("n")   #打印空行,便于查看
student_a.get_name() #实例化后,直接调用类的方法
student_a.do_homework()
student_a.get_hometown()  
print("n")   #打印空行,便于查看
student_b.get_name() 
student_b.get_grade()
student_b.get_age()  
student_b.play_game()  
print("n")   #打印空行,便于查看
student_a.get_student_info()
student_b.get_student_info()

说明 :

1)语句  student_a = Student("jack",13,7,'Newyork') 这条语句是创建一个名为jack,年龄13,7年级,来来自纽约的学生,

调用Student类中的方法 __init__() ,创建一个表示特定学生的实例student_a

2)语句  print("The student is "+student_a.name.title()+'.')是访问实例属性,要访问实例的属性,可使用句点表示法,即实例名.属性,如student_a.name

3)语句 student_a.get_name()  是调用方法,要调用方法,可指定实例的名称(这里是student_a )和要调用的方法,用句点分隔它们。上述代码中最后几行都是调用方法。

4)语句  

student_a = Student("jack",13,7,'Newyork')
student_b = Student("huawei",12,7,'wuhai')

按需求根据类创建2个实例,并且在创建过程中,对2个实例的属性给赋予不同默认值,实际运行中,可按需求,创建任意数量的实例,比如一个班有56个学生,创建56个实例,但都具有相同的属性,注意属性的值不一定相同

 

运行结果如下:

The student is Jack.
The student is 13 years old.


The student'name is Jack.
Jack is doing his homework now !
The student Jack is froming Newyork


The student'name is Huawei.
The student is grade 7
The student is 12 years old.
Huawei is playing game with his friend !


Jack is 13 years old, and from Newyorkand  grade7
Huawei is 12 years old, and from wuhaiand  grade7

 实际运行结果(因显示关系,实际运行代码中删除了上述代码部分内容):

 python入门基础(10)--类的创建、使用和继承

 

 二、修改属性的值

类编写好后,最重要的是使用根类创建的实例上,程序运行中的一个重要任务是修改实例的属性。既可以直接修改实例的属性,也可以编写方法以特定的方式进行修改。

 可以以三种不同的方式修改属性的值:直接通过实例进行修改;通过方法进行设置;通过方法进行递增(增加特定的值)

1、直接通过实例进行修改

student_a = Student("jack",13,7,'Newyork')   这里设置的age为13,

student_a.age =12
student_a.grade =6
student_a.get_student_info()

运行结果:

Jack is 12 years old, and from Newyorkand  grade 6

2、通过方法进行更新修改属性的值

如果有更新属性的方法,这样,就无需直接访问属性,而可将值传递给一个方法,由它在内部进行更新.

    #在类中新增加一个update_info()方法,用来更新age,grade和hometown
def update_info(self,new_age,new_grade,new_hometown): #定义更新学生信息一个方法(函数),可更新3个参数"""
        self.age = new_age     
        self.grade = new_grade 
        self.hometown = new_hometown
#调用方法 update_info()修改实例学生信息,并调用get_student_info()打印 student_b.update_info(13, 8, 'hubei') #通过方法update_info()修改属性的值,即对应的 student_b.get_student_info()

运行结果:

Huawei is 13 years old, and from hubei and  grade 8

3、通过方法对属性的值进行增加(或减少)

比如学生的年龄,年级,可以进行增加,游戏中某个角色的生命力,在被攻击后减少。

    def add_age(self, ages):#定义一个方法对属性的值进行增加
        self.age += ages  # self.age值加上形参ages的值,再存入self.age
             
"""实例化,创建两个学生 """        
student_a = Student("jack",13,7,'Newyork') #创建实例 student_a ,
student_a.get_student_info() #打印学生全部信息
print('n')
student_a.add_age(2) #对年龄加2处理
student_a.get_student_info() #打印学生全部信息

运行结果:

Jack is 13 years old, and from Newyork and  grade 7

Jack is 15 years old, and from Newyork and  grade 7

三、继承

如果编写的类是另一个现成类的特殊版本,可使用继承。
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法,但父类可以没有这些属性和方法。

继续上述代码,并进行重构:

class Person(): #创建一个person类,父类必须包含在当前文件中,且位于子类前面。
    def __init__(self, name, age,hometown): #父类
        self.name = name   
        self.age = age    
        self.hometown = hometown   #属性hometown  
    def get_name(self):        #定义打印学生名字的一个方法(函数)  """
        print("The person'name is "+self.name.title()+'.')      
    def get_age(self):         #定义打印学生年龄的一个方法(函数)  """
        print("The person is "+str(self.age)+' years old.')      
    def get_grade(self):       #定义打印学生家乡的一个方法  """
        print("The person is grade "+str(self.grade))    
    def play_game(self):        #定义人游戏  """
         print(self.name.title()+" is playing game with his friend !") 
    def get_hometown(self):    #定义打印学生家乡的一个方法  """
         print("The person "+self.name.title()+" is froming "+self.hometown.title())           

class Student(Person): #定义子类Student,必须在括号内指定父类的名称  
    def __init__(self, name, age,hometown): #方法 __init__()接受创建Person实例所需的信息
        super().__init__(name, age,hometown)
        self.grade = 7   #设置为默认值 7  
def do_homework(self): #定义学生的一个方法(函数),做家庭作业""" print(self.name.title()+" is doing his homework now !") def get_student_info(self): #定义学生的一个方法(函数),打印学生信息""" student_info = self.name.title()+' is '+str(self.age)+' years old, and from '+self.hometown +' and grade '+str(self.grade) print(student_info) def update_info(self,new_age,new_grade,new_hometown): #定义更新学生信息一个方法(函数)""" self.age = new_age self.grade = new_grade self.hometown = new_hometown """实例化, """ new_student=Student("jack",13,'NewYork') new_student.get_student_info() #打印学生全部信息 print("n") student_c=Student("Lily",14,'NewYork') student_c.get_student_info() #由于没有修改grade,打印出来为默认值 7 print("n") #修改实例student_c中的grade student_c.grade=9 #修改自己的的属性grade为9 student_c.get_student_info() #打印学生全部信息

(1)语句:class Person() 表示创建一个Person类,语句: def __init__(self, name, age,hometown)定义自身,除了self外,有三个形参,分别为name,age,hometown.后面的代码定义Person的五个方法。

   (2) 语句:class Student(Person),定义子类Student,也就是Student将继承Person中的三个参数和五个方法,注意:必须在括号内指定父类的名称 

class Student(Person):   定义子类Student,必须在括号内指定父类的名称  

  def __init__(self, name, age,hometown): #方法 __init__()接受创建Person实例所需的信息

    super().__init__(name, age,hometown)   super() 是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用Student的父类person的方法 __init__()

    self.grade = 7  #对Student类增加一个在父类Person中没有的新属性grade

new_student=Student("jack",13,'NewYork')
new_student.get_student_info() #打印学生全部信息
print("n")
student_c=Student("Lily",14,'NewYork')
student_c.get_student_info()  #由于没有修改grade,打印出来为默认值 7
print("n")
#修改实例student_c中的grade
student_c.grade=9  #修改自己的的属性grade为9
student_c.get_student_info() #打印学生全部信息

运行结果:

Jack is 13 years old, and from NewYork and  grade 7
Lily is 14 years old, and from NewYork and  grade 7   #grade为默认值7
Lily is 14 years old, and from NewYork and  grade 9    #grade为修改后的 9

实际运行结果如下:

 python入门基础(10)--类的创建、使用和继承

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python入门基础(10)–类的创建、使用和继承 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • python入门基础(11)–类的导入、继承及使用

    在上篇“python中的类的创建、使用和继承”中,创建了Person()和Student()两个类,最后才是程序执行主体,如下:  class Person(): #创建一个person类,父类必须包含在当前文件中,且位于子类前面。 def __init__(self, name, age,hometown): #父类 self.name = name se…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(8)–Numpy中几中常见的图形

    在NumPy中,所有的标准三角函数如sin、cos、tan等均有对应的通用函数。 一、利萨茹曲线 (Lissajous curve)利萨茹曲线是一种很有趣的使用三角函数的方式(示波器上显示出利萨茹曲线)。利萨茹曲线由以下参数方程定义: x = A sin(at + n/2) y = B sin(bt)利萨茹曲线的参数包括 A 、 B 、 a 和 b 。为简单…

    2023年4月2日
    00
  • python入门基础(1)—安装

      说明:0基础,那就先练习python语言基础知识,等基础知识牢固了,再对各开发平台分别进行介绍。这里只介绍两个简单而又容易搭建开发平台Anaconda和pycharm   Anaconda是一个开源的Python发行版本,包括Conda、Python以及一堆工具包,比如:numpy、pandas等等180多个科学包及其依赖项,因后期涉及数据处理及深度学习…

    2023年4月2日
    00
  • Python数据分析–Numpy常用函数介绍(3)

    摘要:先汇总相关股票价格,然后有选择地对其分类,再计算移动均线、布林线等。 一、汇总数据 汇总整个交易周中从周一到周五的所有数据(包括日期、开盘价、最高价、最低价、收盘价,成交量等),由于我们的数据是从2020年8月24日开始导出,数据多达420条,先截取部分时间段的数据,不妨先读取开始20个交易日的价格。代码如下: import numpy as np f…

    2023年4月2日
    00
  • python数据可视化-matplotlib入门(1)–安装及绘制简单的曲线

    一、安装matplotlib 1)由于已安装anaconda,可直接打开anaconda prompt,再用命令pip install matplotlib进行安装,因镜像问题,可能较慢,建议第2种方式。 2)访问https://pypi.org/project/matplotlib/#files,并查找与你使用的Python版本匹配的wheel文件(扩展名…

    2023年4月2日
    00
  • python数据可视化-matplotlib入门(2)-利用随机函数生成变化图形

    综合前述的类、函数、matplotlib等,完成一个随机移动的过程(注意要确定移动的次数,比如10万次),每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策确定的,最后显示出每次移动的位置的图表。 思考: 1)每次走动多少个像素,由随机函数决定,每次移动方向也随机确定。由随机方向和随机像素共同移动位置大小和方向。 2)保证将每次移动的位置保存在列…

    2023年4月2日
    00
  • django基础02–一个基于数据库的小项目

    摘要:简单修改、增加部分页面,了解django开发的过程。(Python 3.9.12,django 4.0.4 ) 接前篇,通过命令: django-admin startproject myWebSite 创立了新的站点,cd myWebSite进入到站点根目录,并用命令python manage.py runserver 8080(或其他端口号) 就可…

    2023年4月2日
    00
  • python数据可视化-matplotlib入门(3)-利用随机函数生成变化图形2

     鉴于上一篇中最后三个问题: 1、上述程序是否能进行优化(比如功能相同的) 2、创建三个3个实例,用了3个语句,能否建一个函数,只输入一个数n,就自动创建n个实例?同时,每个实例的num_times随机,(n比较大时,num_times应该比较小) 3、当实现上述功能后,程序运行,只输入一个参数(创建实例的个数),就会自动生成对应的num_times,并分别…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部