Python-9.3-OOP

OO

  • 思想
    • 以模块化思想解决工程问题
    • 面向过程 vs 面向对象
      • 由面向过程转向对象
  • 常用名称
    • oo:面向对象
    • ooa:分析
    • ood:设计
    • oop:编程
    • ooi:实现
    • ooa -> ood -> ooi
  • 类 vs 对象
    • 类:抽象,描述的是一个集合,侧重于共性
    • 对象:具象,描述的是个体

一:类

1、类的内容

  • 动作:函数
  • 属性:变量

2、定义类:class关键字

  • 遵循大驼峰
  • 第一个字母大写

3、self

  • self可以用别的名称代替
  • self不是关键字
  • 作用是指代本身

4、类的变量作用域的问题

  • 类变量

    • 属于类自己的变量
    • 注意类的变量的定义位置和方法
    • 不需要前缀
  • 实例变量

    • 属于实例的变量
  • 访问实例的属性,如果实例没有定义属性,则自动访问类的属性,如果类也没有定义,报错

# 定义类
class Student():
    """学生"""
    def __init__(self, student, age):
        """初始化学生信息"""
        self.student = student
        self.age = age
    
    def greet_student(self):
        """向学生问候"""
        print(self.student.title() + " is " + str(self.age) + " years old.")
        return None
        
# 定义对象
jack = Student('jack', 8)
jack.greet_student()

Jack is 8 years old.

5、访问类的属性

  • 在类里面如果强制访问类的属性,则使用方法__class__(),注意前后两个下划线
  • 类方法
    • 定义类的方法的时候,没有self参数
    • 类的方法只允许使用类的内容
    • 访问类的内容
      • ClassName
      • 方法__class__()
# 定义类
class Student():
    """学生"""
    """初始化学生信息"""
    student = 'jack'
    age = 18
    
    def greet_student():
        """向学生问候"""
        # 类方法中不允许访问实例的任何内容
        # 如果访问类的内容,注意两种用法
        print("{} is {} years old.".format(Student.student, __class__.age))
        return None
        
# 定义对象
Student.greet_student()

6、构造函数

  • 类在实例化的时候,执行一些基础性的初始化的工作
  • 使用特殊的名称和写法
  • 自动调用
  • 构造函数的调用时间
    • 是在实例化的时候第一个被执行的函数
  • 要求:
    • 第一个参数必须有,一般推荐self
    • 可以有 return
class Student():
    """学生"""
    def __init__(self):
        print("被调用")
        return None

jc = Student()

被调用

二:面向对象的三大特征

  • 继承
  • 封装
  • 多态

1、继承

  • 子类可以使用父类定义的内容或者行为等
(1)继承的实现
  • 父类、基类、超类:被继承的类 Base Class, Super Class
  • 子类:有继承行为的类
  • 所有类都必须有一个父类
    • 如果没有,则默认是 object 的子类
    • 子类有多个父类
# 所有类必须有父类
# 默认是 object
class Person(object):
    """一个人的简介"""
    def __init__(self, name, age):
        """初始化人的属性"""
        self.name = name
        self.age = age

    
    def describe_person(self):
        """描述一个人"""
        print("My name is {} and I am {} years old.".format(self.name.title(), str(self.age)))

class Superman():
    """超人"""
    def fly(self):
        print("I can fly.")
    
# 父类写在类定义的时候括号里
# Python允许多继承
class Teacher(Person, Superman):
    """超人老师"""
    def __init__(self, name, age):
        super().__init__(name, age)

jack = Teacher('jack', 18)
jack.fly()
jack.describe_person()

I can fly.
My name is Jack and I am 18 years old.

(2) issubclass() 检测是否是子类
  • 可以用来检测两个类的父子关系
# 利用issubclass()检测 Person(), Superman(), Teacher()之间的父子关系
print(issubclass(Person, Superman))
print(issubclass(Teacher, Person))
print(issubclass(Teacher, Superman))

False
True
True

(3)构造函数的继承
  • 构造函数默认继承
    • 子类如果没有构造函数,则自动调用父类的构造函数
  • 一旦子类定义了,则不再自动调用父类构造函数
class Student():
    """学生"""
    def __init__(self):
        print("被调用")
        return None

jc = Student()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值