【21天python打卡】第6天 面向对象编程(1)

简介: ​大家好,今天是21天python打卡的第6天,上一篇讲了python基础语法关于数据类型和字符串类型表示以及操作(索引和切片)和我们简单举例部分函数的说明。今天讲讲关于面向对象编程的相关知识,类是什么,以及面向对象三要素。

面向对象

首先需要明确,面向对象编程不是python独有的;

面向对象是一种编程思想;

在面向对象的思想中

万物都是对象


面向对象的简单理解:

面向对象是把一组数据结构和处理他们的方法组成对象,把具有相同行为的对象归纳成类,通过封装隐藏类的内部细节,通过继承使类得到泛化,通过多态实现基于对象类型的动态分类。


是什么

类表示一组(或一类)对象,每个对象都属于特定的类,并被称为该类的实例。

在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。

编写类时,你定义一大类对象都有的通用行为。基于类创建 对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。根据类来创建对象被称为 实例化,这让你能够使用类的实例

在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法;对象由属性和方法组成。属性不过是属于对象的变量,而方法是存储在属性中的函数。


  • python中类的创建

示例如下

class Person():
    def __init__(self):
        pass
    def set_name(self, name):
        self.name = name
    def get_name(self):
        return self.name
    def greet(self):
        print("Hello, world! I'm {}.".format(self.name))

Person是类的名称,包含三个方法定义, class 语句创建独立的命名空间,用于在其中定义函数。参数 self 指向对象本身。

方法 init() 是一个特殊的方法,每当创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。

self 很有用,甚至必不可少。如果没有它,所有的方法都无法访问对象本身——要操作的属性所属的对象;

默认情况下,可从外部访问对象的属性。若让属性不能从对象外部访问,可将属性定义为私有。私有而只能通过存取器方法来访问

Python没有为私有属性提供直接的支持,要让方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可


对象是什么

对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点:

对象具有属性和行为。

对象具有变化的状态。

对象具有唯一性。


对象都是某个类别的实例。

对象就是通过类定义的数据结构实例

person = Person()


python对象中的类成员

类的成员主要包括:

字段

方法

属性


字段

字段包括:普通字段和静态字段,使用和定义都是不一样,其最本质的区别就是内存中保存的位置不同。

普通字段属于对象

静态字段属于类


class Person():
    type = 'ren' #静态字段
    def __init__(self):
        #普通字段
        self.name = 'mingzi'
        pass
    def set_name(self, name):
        self.name = name
p = Person()
p.type = 'woman'
p.name = 'man'
print(Person.type)
print(p.name)

在以上示例代码中:

type是静态字段,可通过类名之间调用

name是普通字段,需要通过实例对象调用

通常情况下我们都使用普通字段,当一个变量在类的所有对象中共同使用,而且数据共享的时候,我们就可以使用静态字段。


方法

  • 方法包括:普通方法、静态方法和类方法。

普通方法:由对象调用;包含一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;

类方法:由类调用; 包含一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;使用@classmethod装饰器

静态方法:由类调用;没有默认参数;使用@staticmethod装饰器


代码示例:

class Human:
    count = 0
    def __init__(self, name, age):
        self.name = name
        self.age = age
    #普通方法
    def setName(name):
       self.name=name
    @classmethod
    def add_count(cls):
        cls.count += 1       # 可以通过类名修改类属性
    @classmethod
    def get(cls):
        return cls.count
    @staticmethod
    def static_func():      # 静态方法
        print("普通函数")

普通方法中可以直接使用对象的普通字段

类方法中可以直接使用静态字段

静态方法中不能直接使用普通字段和静态字段


属性

python中的属性就是普通方法的变种,就是将一个方法伪装成一个属性;

  • 属性定义的两种方式:

装饰器:在方法上应用装饰器

静态字段:在类中定义值为property对象的静态字段


面向对象三要素

封装:


通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。


继承:


继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。


多态:


多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。


封装

执行以下代码:

class Person():
    def __init__(self):
        pass
    def set_name(self, name):
        self.__name = name
    def get_name(self):
        return self.__name
    def greet(self):
        print("Hello, world! I'm {}.".format(self.name))
p = Person()
p.set_name('test')
print(p.get_name())

继承

继承是一种创建新类的方式,在python中,新建的类可以继承一个父类(单继承)或多个父类(多继承)

代码示例:

class Person():
    def __init__(self):
        pass
    def set_name(self, name):
        self.name = name
    def get_name(self):
        return self.name
    def greet(self):
        print("Hello, world! I'm {}.".format(self.name))
class Boy(Person):
    def run(self):
        print('i can run')
    def greet(self):
        print('i am subclass boy')
b =Boy()
b.name = '张三'
b.greet()

多态

  • 多态性的本质在于不同的类中定义有相同的方法名,这样我们就可以不用考虑而统一用一种方式去使用对象,可以通过在父类引入抽象类的概念来硬性限制子类必须有某些方法名:
  • 多态已封装和为前提继承

在上面代码基础上新增以下代码:

class Girl(Person):
    def say(self):
        print('i can good girl')
    def greet(self):
        print('i am subclass Girl')

Boy,Girl都继承自Person,三个对象都有同样的方法名greet();

Boy和Girl重写了父类的方法,实现不同的输出。


今天就介绍的这里,面向对象的相关知识我们下一篇继续介绍。

相关文章
|
1月前
|
Python
python基础篇:面向对象编程
python基础篇:面向对象编程
18 0
|
2月前
|
Python
Python中的面向对象编程与继承
本文将深入探讨Python中面向对象编程的核心概念,重点讨论继承的实现原理以及在实际开发中的应用。通过详细的示例和解释,读者将能够全面理解Python中继承的使用方式和优势,为提高代码的复用性和可维护性提供有效的技术支持。
|
12天前
|
算法 Java 程序员
[重学Python] Day6 面向对象编程 基础
面向对象编程基础讲解,包括类与对象的概念,类是对象的模板,对象是类的实例。Python中使用`class`定义类,通过`__init__`初始化对象。创建对象并调用方法如`drive`和`target_client`。访问权限在Python中相对宽松,使用单下划线表示受保护的属性。面向对象的三大支柱是封装、继承和多态,封装是隐藏实现细节,仅暴露简单接口。提供了数字时钟和平面上的点的类定义作为练习示例。
14 0
|
17天前
|
运维 算法 Shell
第六章 Python类(面向对象编程)
第六章 Python类(面向对象编程)
|
17天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
18天前
|
设计模式 算法 程序员
Python从入门到精通:2.1.3深入学习面向对象编程——设计模式的学习与实践
Python从入门到精通:2.1.3深入学习面向对象编程——设计模式的学习与实践
|
18天前
|
数据安全/隐私保护 Python
Python从入门到精通——2.2.1深入学习面向对象编程:类和对象的定义
Python从入门到精通——2.2.1深入学习面向对象编程:类和对象的定义
|
23天前
|
存储 数据安全/隐私保护 Python
《Python 简易速速上手小册》第4章:Python 面向对象编程(2024 最新版)
《Python 简易速速上手小册》第4章:Python 面向对象编程(2024 最新版)
30 0
|
1月前
|
程序员 Python
面向对象编程(OOP)在Python中的应用
【4月更文挑战第8天】面向对象编程(OOP)是使用对象设计软件的编程范式,Python支持OOP,提供类、对象、继承和多态等概念。类是创建对象的蓝图,包含属性和方法。通过`class`关键字定义类,如`Person`类,然后通过类创建对象。继承使子类继承父类属性和方法,如`Student`继承`Person`。多态允许不同类的对象通过相同接口操作,如`print_greeting`函数调用不同对象的`greet`方法。掌握这些概念能编写高效、可维护的Python代码。
|
1月前
|
Python
面向对象编程——Python中的类
面向对象编程——Python中的类
12 0