Python基础-11 面向对象编程_各种方法

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

self的使用

class Students(object):
    def __init__(self,x,y):
        self.name = x
        self.age = y

    def hello(self):
        print('大家好,我是%s'%self.name)

# Students('小明',18) 这段代码具体做了什么
# 1.调用 __new__ 方法,用来申请内存空间
# 2.调用 __init__ 方法传入参数,将 self 指向创建好的内存空间,填充数据
# 3.变量 s1 指向创建好的内存空间
# 4.只要创建变量,就会创建一个新的内存空间
s1 = Students('小明',18)

# 此时需要调出内存中存放的name属性如下
print(s1.name)  # 小明

# 如果该对象没有相应的属性,则调用时会报错,如下:
# print(s1.height)

# 动态属性
# 直接使用等号=,给一个属性赋值
# 如果这个属性存在,则会修改该属性的值
# 如果这个属性不存在,则会给对象添加一个新的属性及对应的值
s1.height = 1.75
print('新添加的的height属性为: %s'%s1.height)

s1.height = 1.95
print('修改后的height属性为: %s'%s1.height)

# 变量调用类中的方法时候,实际是由变量指定的内存空间去调用相应的方法
# 因此不同变量调用方法,输出不同
# 可以简单的理解为:此处的self,实际上是指的创建变量时,创建的那个内存空间
s1.hello()

__slots__属性的使用

  • python本身支持类的动态属性
    • 直接使用等号=,给一个属性赋值
    • 如果这个属性存在,则会修改该属性的值
    • 如果这个属性不存在,则会给对象添加一个新的属性及对应的值
  • 如果需要禁止动态添加类的属性,可以使用 __slots__ 属性,如下示例
    • 这个属性直接定义在类中,是一个元组,用来规定对象可以存在的属性
class Students(object):
    __slots__ = ('name','age')  # 此处规定当前类只能有name和age两个属性

    def __init__(self,x,y):
        self.name = x
        self.age = y

    def hello(self):
        print('大家好,我是%s'%self.name)

s1 = Students('小明',18)

魔法方法的使用

魔法方法,也叫魔术方法,是类中的特殊的一些方法文章来源地址https://www.toymoban.com/news/detail-416498.html

  • 特点:
    • 1.不需要手动进行调用
    • 2.这些方法,都是以双下划线开始,双下划线结束 __init__
    • 3.方法名都是系统规定好的,在合适的时候自己调用
class Person(object):
    # 在创建对象时,会自动调用__init__方法
    def __init__(self):
        print('调用__init__方法')

    # 当这个对象被销毁时,会自动调用__del__方法
    def __del__(self):
        print('调用__del__方法')
    
    # 默认情况下,直接打印对象默认会调__str__ 方法
    # 使用 str() 进行类型转换时也会调用
    def __str__(self):
        return 'str'
    
    # 如果没有定义 __str__ 方法,定义了 __repr__ 方法,则调用 __repr__ 方法
    # 直接打印列表,会调用列表元素中的__repr__方法
    def __repr__(self):
        return 'repr'

    # 使用 对象名() ==> 会直接调用这个对象的 __call__ 方法
    def __call__(self, *args,**kwds):
        print('__call__方法被调用了')

    # 使用 == 对两个对象进行比较,实际上调用的是 __eq__ 方法
    def __eq__(self, __o: object):
        print('__eq__方法被调用了')
        # 此处需要对需要比较的两个对象的比较值进行比较,并返回结果
        # return False 或者return True
    
    # 使用 != 对两个对象进行比较,实际上调用的是 __ne__ 方法
    def __ne__(self, __o: object):
        print('__ne__方法被调用了')
        # 此处需要对需要比较的两个对象的比较值进行比较,并返回结果
        # return False 或者return True

p = Person()

# 如果不作任何修改,直接打印对象,打印的是对象的类型和内存地址
# 当打印一个对象的时候,会调用这个对象的__str__ 或者__repr__方法
# 如果两个方法都写了,会选择str
print(p)  # str
print(p.__repr__())  # repr

# 对象名() ==> 调用这个对象的 __call__ 方法
p()  # __call__方法被调用了

p1 = Person()
p2 = Person()

# == 会调用对象的 __eq__ 方法,获取这个方法的比较结果
# 如果 __eq__ 方法不重写,默认依然是比较内存地址
print(p1 == p2) # False 本质上是调用 p1.__eq__(p2)

# != 本质上是调用对象的 __ne__ 方法,获取 __ne__ 方法的返回值
# 如果对象有 __ne__ 方法,则返回 __ne__ ,如果没有 __ne__ ,则对 __eq__ 方法取反
print(p1 != p2) 

到了这里,关于Python基础-11 面向对象编程_各种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python 面向对象编程:类、对象、初始化和方法详解

    Python 是一种面向对象的编程语言。在 Python 中,几乎所有东西都是对象,都具有其属性和方法。 类似于对象构造函数或用于创建对象的“蓝图”的类。 要创建一个类,请使用 class: 示例,创建一个名为 MyClass 的类,其中包含一个名为 x 的属性: 现在,我们可以使用名

    2024年02月08日
    浏览(40)
  • Python面向对象编程(一)类的基础,关系,继承,封装,多态

    类的一些理论概念及其应用场景等基础内容此处不赘述 目录 python中一切皆对象 类的定义及基础 属性 方法 初始化方法  普通方法 类之间的关系 相互调用 依赖关系 关联关系 组合关系 三大特征----类的继承 重写父类方法 多继承 混合继承  三大特征----封装 三大特征----多态

    2024年02月10日
    浏览(63)
  • TypeScript类与对象:面向对象编程的基础

    TypeScript 是 JavaScript 的一个超集,它为 JavaScript 添加了静态类型、类、接口和装饰器等面向对象编程的特性,并通过编译器将 TypeScript 编译成JavaScript,可以在任何 JavaScript 环境中运行,因此成为了 JavaScript 开发中不可或缺的工具。面向对象编程是现代编程语言的基础,而 Ty

    2024年02月09日
    浏览(29)
  • 【java】面向对象的编程基础

    true false 这里输入set和get可以自动将函数补全,传参初始化在构造属性之后 cc ccccc coleak 这里说明先构造属性,再执行代码块,再初始化 静态代码块 4 4 我是静态变量初始化 我是静态代码块 我是成员变量初始化 我是普通代码块 我是构造方法 快速构造,点击生成,构造函数,

    2023年04月16日
    浏览(27)
  • 第七章 面向对象编程(基础)

    (1)类是抽象的,概念的,代表一类事物,比如人类、猫类... 即它是数据类型。 (2)对象是具体的,实际的,代表一个具体事物,即实例。 (3)类是对象的模板,对象是类的一个个体,对应一个实例。 属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对

    2024年02月06日
    浏览(38)
  • Elasticsearch的基础知识和架构设计,以及一些常用的功能——面向对象编程和数据结构的高级应用场景,以及相应的代码实现方法和工具

    作者:禅与计算机程序设计艺术 2019年,Elasticsearch正式发布了7.0版本。在这个版本更新中,新增了许多新特性和功能,包括全文搜索、分类聚合、分析器、图形化数据可视化等。无论对于企业或个人来说,都意味着更好的应用场景。但是,掌握Elasticsearch并非易事,需要不断学

    2024年02月07日
    浏览(35)
  • C++ 递归与面向对象编程基础

    递归是一种使函数调用自身的技术。这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题。 递归可能有点难以理解。理解其工作原理的最佳方法是通过实验来尝试。 将两个数字相加很容易做到,但将一系列数字相加就更复杂了。在下面的示例中,通

    2024年04月16日
    浏览(25)
  • Java基础(七)面向对象编程(高级)

    回顾类中的实例变量(即非static的成员变量) 创建两个Circle对象: Circle类中的变量radius是一个实例变量(instance variable),它属于类的每一个对象,c1中的radius变化不会影响c2的radius,反之亦然。 如果想让一个成员变量被类的所有实例所共享,就用static修饰即可,称为类变量(

    2023年04月16日
    浏览(26)
  • 【C#基础】C# 面向对象编程

    序号 系列文章 5 【C#基础】C# 运算符总结 6 【C#基础】C# 常用语句讲解 7 【C#基础】C# 常用数据结构 😊大家好,我是writer桑,前面一章已经学习了 C# 中的常用数据结构,那本章就开始学习 C# 程序中面向对象编程的知识,希望看完大家能够有所收获,感谢支持! 面向对象编程

    2024年02月04日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包