Python学习笔记

Python学习笔记(七)

在介绍今天要学的内容之前,我先引入两个名词:面向过程编程和面向对象编程。什么是面向过程,什么是面向对象呢?
面向过程编程:从名字可以看出它是注重过程的。当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数和数据(用于方法的参数) 。然后按照一定的顺序,执行完这些方法(每个方法看作一个过程),等方法执行完了,事情就搞定了。
面向对象编程:看名字它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题就得到解决。
我们之前学过的C语言就是面向过程编程,而Python就是面向对象编程。

今天我们介绍的就是面向对象编程的一个重要特性。我们编写事物的类,并基于这些类来创建对象。

一.创建和使用类

根据约定,在Python中首字母大写的名称就是类(class)。如需创建类,我们就要使用 class 关键字。所有类都有一个名为__init__()的函数,它始终在启动类时执行。
方法__init__()
类中的函数称为方法,这个方法的名称中,开头和末尾有两个下划线(两个!)。每次使用类创建新对象时,都会自动调用该函数。

>>> class Person:
  		def __init__(self, name, age):
    	self.name = name
    	self.age = age
>>> p = Person("libai", 20)
>>> print(p.name)
>>> print(p.age)

libai
20

方法__init__()包含了三个形参:self,name和age。以self为前缀的变量都可供类中的方法使用,这样可通过实例访问的变量称为属性

二.对属性进行操作

1.直接修改属性值
我们通过实例直接进行修改

>>> class Person:
>>> def __init__(self, name, age):
    	self.name = name
    	self.age = age
>>> def greet(self):
    	print("Hello my name is " + self.name)
>>> p = Person("libai", 20)
>>> p.age = 30
>>> print(p.age)

30

2.通过方法修改属性值
我们不需要直接访问属性,直接传递一个方法,对进行内部更新。
我们添加方法update_change()

>>> def update_change(self,age1):
		self.change_age = age1

3.通过方法对属性值进行递增
我们不需要直接访问属性,直接传递一个方法,对进行内部更新。
我们添加方法increment_change()

>>> def increment_change(self,age2):
		self.change_age += age2
三.继承

编写类时,并不一定需要从空白开始。如果我们新编写的类是另一个现成的类的特殊版本,可使用继承。一个类继承另一个类时,它会自动获得另一个类的所有属性和方法。原有的类称为父类,新类成为子类。
编写代码时,父类写在子类的前面。之后,我们引入super()函数,帮助我们将父类和子类关联起来。

class Person:
  def __init__(self, lname, fname):
    self.firstname = fname
    self.lastname = lname

  def printname(self):
    print(self.lastname,self.firstname )

class Student(Person):
  def __init__(self, lname, fname):
    """初始化父类的属性"""
    super().__init__(lname,fname)

x = Student("li", "bai")
x.printname()

li bai

1.给子类添加新属性
我们继承子类之后,得到父类的属性。但是对于子类新的属性,我们就需要添加区分父类和子类属性的方法。

class Person:
  def __init__(self, lname, fname):
    self.firstname = fname
    self.lastname = lname

  def printname(self):
    print(self.lastname,self.firstname )

class Student(Person):
  def __init__(self, lname, fname, year):
    """初始化父类的属性"""
    super().__init__(lname,fname)
    self.graduationyear = year
    """添加子类的新属性"""

x = Student("li", "bai", 2022)
x.printname()
print(x.graduationyear)

li bai
2022

2.给子类添加新方法

class Person:
  def __init__(self, lname, fname):
    self.firstname = fname
    self.lastname = lname

  def printname(self):
    print(self.lastname,self.firstname )

class Student(Person):
  def __init__(self, lname, fname, year):
    """初始化父类的属性"""
    super().__init__(lname,fname)
    self.graduationyear = year
    """添加子类的新属性"""
  def welcome(self):
    print("Welcome", self.lastname, self.firstname)
   """添加子类的新方法"""

x = Student("li", "bai", 2022)
x.welcome()

Welcome li bai

注:如果我们在子类中添加一个与父类中的函数同名的方法,则将覆盖父方法的继承。

3.重写父类的方法
对于父类中的方法,如果对于子类不匹配,我们就可以对其进行重写。重写之后,程序将不会执行父类的旧方法,转而执行重写的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值