Python面向对象(全套)

这篇具有很好参考价值的文章主要介绍了Python面向对象(全套)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

编程思想分为面向对象和面向语言

什么是面向过程?

面向过程即以事物发生过程为主要目标进行编程(什么正在发生)

什么是面向对象?

面向对象即把一件事物为对象进行编程,每个对象都有属性和方法。

例如:人可以作为对象,属性有姓名、年龄、身高...方法有走、跑、跳...

车可以作为对象,属性有轮胎、车灯,方向盘...方法有载人、放音乐...

Python也支持面向对象的三大特征:封装、继承、多态

类和对象

类:是对一些具有相同特征和行为的事物的分类,它是抽象的

对象:它是类的实例化,是具体的

类与对象的关系即模板与产品:模板只能有一个,但对象可以有很多个

我们通常用大驼峰命名法去命名一个类名

类的详解

Python中定义类有两种:旧式类新式类

在早期Python中,类不会默认继承object,而没有继承object的类为旧式类。而在python3之后,类会默认继承object类,继承了object的类为新式类

旧式类:

class A:
    pass

新式类:

class B(object):
    pass

现在一般都使用新式类

属性

在Python中类中的属性分为两种:公有属性私有属性

公有属性:可以在类内类外使用,没有限制

私有属性:只能在类内使用,但可以使用方法间接访问

私有属性定义时需在前面加上两个下划线(__)

class A(object):
    
    #公有属性
    a = "public"

    #私有属性
    __b = "private" 

    print("属性为"+a)
    print("属性为"+__b)
test = A()

属性为public
属性为private

方法

在Python中类中的方法分为两种:公有方法私有方法

公有方法:可以在类内类外使用,没有限制

私有方法:只能在类内使用

私有属性定义时需在前面加上两个下划线(__)

class A(object):
    def public(self):
        print("公有方法")
    def __private(self):
        print("私有方法")
test = A()
test.public()
test._A__private()

公有方法
私有方法

Python中访问私有方法可以通过:实例化类._类__私有化方法

类中内置方法(魔法函数)

在Python的类中以__XX__命名的方法都是类中的内置方法即魔法函数

如何查看类中的内置函数:

print(dir(object))

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

类中常用的内置方法:

1、__init__对象初始化时,会被自动调用

可以使用__init__方法来控制对象初始化的过程

    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

2、__new__创建对象时,会被自动调用

3、__del__对象被从内存中销毁前,会被自动调用

4、__str__返回对象的描述信息,print函数输出使用

class Animal(object):
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __str__(self):
        return "name = "+ self.name +""

a = Animal("dog","2years","man")
print(a)

name = dog

在使用__str__方法后用print函数去输出实例化对象时会输出__str__函数中给定的描述信息(属性为私有化也可被输出)

面向对象的三大特征

封装 继承 多态

封装

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以权限控制

在Python中定义类时,我们都需要将属性私有化,如何提供公开的方法去供外部访问和修改

class Animal(object):
    def __init__(self,name,age,sex):
        self.__name = name
        self.__age = age
        self.__sex = sex

a = Animal("dog","2years","man")

此例子中的属性都为私有属性,那我们如何去访问?

第一种封装方式:

在类中提供get方法和set方法供外部访问

class Animal(object):
    def __init__(self,name,age,sex):
        self.__name = name
        self.__age = age
        self.__sex = sex

    #提供公开的get方法
    def get_name(self):
        return self.__name

    #提供公开的set方法
    def set_name(self,name):
        self.__name = name

a = Animal("dog","2years","man")
print(a.get_name())
a.set_name("cat")
print(a.get_name())

dog

cat

第二种封装方式:

使用porperty()函数,使用此函数的时候需要有get方法和set方法

class Animal(object):
    def __init__(self,name,age,sex):
        self.__name = name
        self.__age = age
        self.__sex = sex

    #提供公开的get方法
    def get_name(self):
        return self.__name

    #提供公开的set方法
    def set_name(self,name):
        self.__name = name

    name = property(get_name,set_name)
a = Animal("dog","2years","man")
print(a.name)
a.name = "cat"
print(a.name)

dog
cat

注意:在类外修改属性时a.后需要跟接受property的变量

第三种封装方式:

通过装饰器@property在get方法上进行装饰

class Animal(object):
    def __init__(self,name,age,sex):
        self.__name = name
        self.__age = age
        self.__sex = sex

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self,name):
        self.__name = name


a = Animal("dog","2years","man")
print(a.name)
a.name = "cat"
print(a.name)

dog
cat

继承

类与类之间还有种关系,即继承

继承可以提高代码的利用率、复用率

object为所有类的父类,Python支持多继承class Son(father1,father2......),在多继承中需要注意继承顺序,在继承时它会按照继承顺序来继承,即优先级

class father(object):
    def __init__(self):
        self.money =100
        self.home = "房子"
    def tell(self):
        print("ok")

#儿子继承了父亲
class son(father):
    pass

if __name__ == '__main__':
    a = son()
    a.tell()
    print(a.money)
    print(a.home)

ok
100
房子

注意:子类可以继承父类的所有公有属性公有方法

在子类继承父类后,父类中的方法不能满足子类的使用时,我们可以在子类中进行方法重写

方法重写时,子类与父类的方法名称、参数必须相同

在Python中有方法的重写,但是没有方法重载,但是可以实现方法的重载(装饰器)

方法重写示例:

class father(object):
    def tell(self):
        print("我喜欢平平淡淡")

#儿子继承了父亲
class son(father):
    def tell(self):
        print("我喜欢赚钱")

if __name__ == '__main__':
    a = son()
    a.tell()

我喜欢赚钱

super()关键字:它相当于一个指针,默认指向指针

class father(object):
    def tell(self):
        print("我喜欢平平淡淡")

#儿子继承了父亲
class son(father):
    def tell(self):
        print("我喜欢赚钱")

    def test(self):
        self.tell()
        super().tell()

if __name__ == '__main__':
    a = son()
    a.test()

我喜欢赚钱
我喜欢平平淡淡

多态

多态基于继承的基础之上,一个对象的多种实现,即父类引用指向子类实例的现象

Python是弱数据语言,所以多态在python中显得不太重要,它在定义变量的时候不用声明数据类型,因此支持多态

class father(object):
    def tell(self):
        print("我是父亲")

#儿子继承了父亲
class son(father):
    def tell(self):
        print("我是儿子")

#女儿继承了父亲
class daughter(father):
    def tell(self):
        print("我是女儿")

def test(father):
    father.tell()


if __name__ == '__main__':
    a = father()
    b = son()
    c = daughter()
    test(a)
    test(b)
    test(c)

我是父亲
我是儿子
我是女儿

在例子中通过tell()函数实现了父类引用指向子类实例,完成了一个函数的多种实现文章来源地址https://www.toymoban.com/news/detail-612725.html

到了这里,关于Python面向对象(全套)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 🔥🔥Java开发者的Python快速进修指南:面向对象--高级篇

    首先,让我来介绍一下今天的主题。今天我们将讨论封装、反射以及单例模式。除此之外,我们不再深入其他内容。关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符。而对于反射来说,我认为它比Java简单得多,不需要频繁地获取方法和属性,而是

    2024年02月05日
    浏览(66)
  • Java开发者的Python快速进修指南:面向对象--高级篇

    首先,让我来介绍一下今天的主题。今天我们将讨论封装、反射以及单例模式。除此之外,我们不再深入其他内容。关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符。而对于反射来说,我认为它比Java简单得多,不需要频繁地获取方法和属性,而是

    2024年02月05日
    浏览(68)
  • 【 Python 全栈开发 ⑰ 】面向对象、继承、多态、类方法与类属性

    Python 面向对象编程 是一种编程范式,它将数据和操作数据的方法组合在一起,形成一个“对象”,并且该对象可以被复用。在 Python 中,每一个对象都拥有一些属性和方法,它们是该对象的特征和行为。 面向对象编程可以帮助我们更好地组织和管理代码,使得代码更加模块

    2024年02月08日
    浏览(45)
  • c、c++、java、python、js对比【面向对象、过程;解释、编译语言;封装、继承、多态】

    目录 内存管理、适用 区别 C 手动内存管理:C语言没有内置的安全检查机制,容易出现内存泄漏、缓冲区溢出等安全问题。 适用于系统级编程 C++ 手动内存管理:C++需要程序员手动管理内存,包括分配和释放内存,这可能导致内存泄漏和指针错误。 适用于游戏引擎和系统级编

    2024年02月08日
    浏览(76)
  • python 面向对象 对象

    类 构造函数 魔术方法 python中类中有内置方法,这些内置方法,成为魔术方法 魔术方法如下[常用]: init 构造函数 自动执行 str 字符串方法 lt 小于、大于符号比较 le 小于等于、大于等于符号比较 eq ==等于符号 面向对象的特点 封装 多态 继承 ##python中私有属性、私有方法,,

    2024年02月09日
    浏览(56)
  • Python基础之面向对象:8、面向对象之元类

    目录 面向对象之元类 一、什么是元类 二、元类推导流程 三、创建类的方式 方式一: 方式二: 四、元类定制类的产生行为 五、元类定制对象的产生行为 六、元类之双下new Python中一切皆为对象,对象是有类实例化生成; 类也是对象(类对象),生成类对象的类可称之为元

    2024年01月20日
    浏览(56)
  • 【Python学习】Python学习20- 面向对象(2)

    目录 文章所属专区 Python学习 本章节主要说明Python的面向对象的处理。 通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类 语法: 1、如果在子类中需要父类的构造方法就需要显式的调用父类的构造方法,或者不重写父类的构造方法。详细说明可查看:

    2024年01月18日
    浏览(59)
  • 【Python学习】Python学习20- 面向对象(1)

    目录 文章所属专区 Python学习 本章节主要说明Python的面向对象的处理。Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方

    2024年01月16日
    浏览(57)
  • 【Python学习】—面向对象(九)

    类中不仅可以定义属性来记录数据,也可以定义函数,用来记录行为,类中定义的属性(变量)我们称之成员变量,类中定义的行为(函数),我们称之为成员方法。 表示对象本身的意思 只有通过self,成员方法才能访问类的成员变量 self出现在形参列表中,但是不占用参数

    2024年02月08日
    浏览(46)
  • python 面向对象之继承

    前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大家分享面向对象的三大特性之一:继承。 继承具有以下特性: 代码重用:继承允许我们创建一个新的类,并从一个或多个现有的类中继承属性和方法。这使得我们可以避免重复编写相同的代码,提高代码的重

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包