4.Python 面向对象、模块

知识要点

4.1 面向对象编程

4.2 类和对象

4.3 对象的属性和方法

4.4 继承

4.5 多态

4.6 模块

4.1 面向对象编程

面向对象编程:简称OOP,把对象作为程序的基本单元

面向过程的程序:计算机程序视为一系列命令集合

面向对象的程序:计算机程序视为一组对象的集合

  • Python 中所有数据类型都可视为对象
  • 面向对象是抽象出 Class,根据 Class 创建 Instance

4.2 类和对象

对象:某一个具体事物的存在,可以直接使用

:将具有共同特征和行为的一组对象抽象定义为类

对象和类的关系:

  • 类就是创建对象的模板
  • 一个类可以找到多个对象

定义类:class 类名():

class Hero(object):
    def info(self):
        print('hero')
'''
    object 是Python 里所有类的最顶级父类
    类名 的命名规则按照“大驼峰命名法”
    info 是实例方法,第一个参数一般是 self,表示实例对象
    根据已经定义的类取创建出一个或者多个对象
'''
class Hero(object):
    def info(self):
        print(self)
        print('self 各不同,对象是出处。')
# Hero 这个类,实例化了一个对象
hero = Hero()
# 对象调用实例方法 info(),执行 info() 里的代码
# . 表示选择属性或者方法
hero.info()
print(hero) 

4.3 对象的属性和方法

添加和获取对象的属性

  • 类外部添加对象属性:对象名.属性名 = 值
  • 类外部获取对象属性:对象名.属性名

通过 self 获取对象属性

  • 类内部添加对象属性:self.属性名 = 值
  • 类内部获取对象属性:self.属性名

对象的属性和方法

  • __init__() 方法,在创建一个对象时默认被调用,不需要手动调用。
  • __init__(self) 中的 self 参数,不需要开发者传递,python 解释器会自动把当前的对象引用传递过去。
class Hero(object):
    def __init__(self):
        self.name = 'hero'
        self.hp = 2600
    def move(self):
        print('正在赶往事发地点...')
# 实例化一个英雄对象( 实例化对象的同时,自动调用__init__()方法 )
hero = Hero()

init 魔法方法

  • 一个类可以创建多个对象
  • __init__(self) 中,默认 1 个参数名字 self,若创建对象时传递了 2 个实参,除了 self 作为第一个形参外还需要 2 个形参
  • 若类中有多个对象,每个对象的属性时各自保存的,但实例方法时共享的,只占用一份内存空间;类会通过 self 来判断时哪个对象调用了实例方法
class Hero(object):
"""定义了一个英雄类,可以移动和攻击"""
    def __init__(self, name, hp):
      """ __init__() 方法,用来做变量初始化 或 赋值 操作;英雄名、生命值 """
      self.name = name
      self.hp = hp
    def move(self):
      """实例方法"""
        print("%s 正在前往事发地点..." % self.name)
    def info(self):
        print("英雄 %s 的生命值 :%d" % (self.name, self.hp))
# 实例化英雄对象时,参数会传递到对象的__init__()方法里 blind
= Hero("瞎哥",2600) gailun = Hero("盖伦",4200)
# 不同对象的属性值的单独保存 print(id(blind.name)) print(id(gailun.name))
# 同一个类的不同对象,实例方法共享 print(id(blind.move())) print(id(gailun.move()))

4.4 继承

继承:多个类之间的所属关系

若类A里的属性和方法可以复用,可以通过继承的 方式传递到类B里,类A就是基类,也叫父类;类B就是派生类,也叫子类。

class A(object):  # 父类
    def __init__(self):
        self.num = 10
    def print_num(self):
        print(self.num + 10)
class B(A):   # 子类
    pass

 

继承 含义 实例
单继承

含义:子类只继承一个父类

特点

  • 子类在继承时,在定义类时,小括号()中为父类的名字
  • 父类的属性/方法,会被继承给子类
  • 子类对象可以直接使用父类的属性和对象
# 定义一个Person类
class Person(object):
    def __init__(self):
        # 属性
        self.name = "女娲"
    # 实例方法
    def make_person(self):
        print(" <%s> 造了一个人..." % self.name)

# 定义Teacher类,继承了 Person,则Teacher是子类,Person是父类。
class Teacher(Person):
   ''' 子类可以继承父类所有的属性和方法,
     哪怕子类没有自己的属性和方法,也可以使用父类的属性和方法。
  '''
    pass

panda = Teacher() # 创建子类实例对象
print(panda.name) # 子类对象可以直接使用父类的属性
panda.make_person() # 子类对象可以直接使用父类的方法
多继承

含义:子类只继承多个父类

特点

  • 多继承可以继承多个父类,也继承了所有父类的属性和方法
  • 多个父类中,不重名的属性和方法,不会有任何影响

(多个父类时,哪个类放在前面,会优先哪个类的属性和方法)

class Women(object):
    def __init__(self):
        self.name = "女娲" # 实例变量,属性
    def make_person(self): # 实例方法,方法
        print(" <%s> 造了一个人..." % self.name)
    def move(self):
        print("移动..")
class Man(object):
    def __init__(self):
        self.name = "亚当"
    def make_person(self):
        print("<%s> 造了一个人..." % self.name)
    def run(self):
        print("跑..")
class Person(Women, Man): # 多继承,继承了多个父类
    pass
ls = Person()
print(ls.name)
ls.make_person()
ls.move()
ls.run()

4.5 多态

多态:不同的子类对象调用相同的父类方法,产生不同的执行结果

优点:可以增加代码的外部调用灵活度

  • 多态以 继承重写 父类方法为前提
  • 多态时调用方法的技巧,不会影响到类的内部设计
class Animal(object):
    def run(self):
        print('Animal is running...')

class Dog(Animal):
    def run(self):
        print('Dog is running...')

class Cat(Animal):
    def run(self):
        print('Cat is running...')

# 定义一个方法
def run_twice(animal):
    animal.run()
    animal.run()
dog = Dog()
cat = Cat()
run_twice(dog)
run_twice(cat)

4.6 模块

模块:一个.py文件就是一个模块,模块就是管理功能代码的

内置模块:就是 python 自己内部自带的,不需要下载的模块,如以下常用模块:

# 小技巧:查看模块中的内容
import math
dir(math)
模块 用处
os 执行系统命令
random 随机数
math 数学计算,提供了许多对浮点数的数学运算函数
time 时间,处理日期和时间

 

 

posted @ 2021-08-14 21:41  Hello_world_Lan  阅读(82)  评论(0)    收藏  举报