当前位置: 首页 > news >正文

二十八、Python基础语法(面向对象-下)

一、self

从函数的语法上来看, self 是形参 , 是一个普通的参数,那么在调用的时候,就需要传递实参值。从调用上看, 我们没有给 self 这个形参传递实参值, 但是 Python 解释器会自动的将调用这个方法的对象,作为实参值传递给 self。

class Dog:def eat(self):print('小狗吃骨头')print(id(self))dog1 = Dog()
print(id(dog1))
dog1.eat()
print('*' * 20)
dog2 = Dog()
print(id(dog2))
dog2.eat()

运行结果:

总结:self 就是调用这个方法的对象

二、属性

属性是每个对象都有的,每个对象都会由内存空间来保存自己的属性学习,属性可以在类内部处理,也可以在类外部处理,不是是在内部还是外部,都是通过对象操作的。

获取对象的属性:对象.属性名

添加或者修改属性:对象.属性名 = 值

class Dog:def eat(self):print(f'小狗{self.name}吃骨头')dog1 = Dog()
# 添加属性
dog1.name = '旺财'
dog1.eat()
print('*' * 20)
dog2 = Dog()
# 添加属性
dog2.name = '阿黄'
dog2.eat()

运行结果:

 

注意:一般不在类外部操作对象的属性,添加属性的操作,都写在 __init__ 方法里面

三、魔法方法

魔法方法:在Python 中有一类方法,以两个下划线开头, 两个下划线结尾, 并且在满足某个条件的情况下会自动调用。

1.__init__ 初始化方法

__init__用来给对象添加属性,添加的所有的属性都写在这个方法中,在创建对象时,会自动调用。

class Dog:def __init__(self):print('我被调用了')Dog()  # 创建对象,会调用
dog1 = Dog()  # 会
dog2 = dog1  # 不会
class Dog:# 给对象添加属性def __init__(self, name):self.name = namedef eat(self):print(f'小狗{self.name}吃骨头')dog1 = Dog('旺财')
dog1.eat()
print('*' * 20)
dog2 = Dog('阿黄')
dog2.eat()

运行结果:

2.__str__ 方法

__str__作用自定义返回对象的属性说明信息,print(对象) 时,会自动调用 __str__ 方法,会输出__str__方法的返回值。

class Dog:# 给对象添加属性def __init__(self, name):self.name = namedef __str__(self):return f'这个对象包含一个属性,名称是{self.name}'def eat(self):print(f'小狗{self.name}吃骨头')dog1 = Dog('旺财')
print(dog1)  # 这个对象包含一个属性,名称是旺财
print('*' * 20)
dog2 = Dog('阿黄')
print(dog2)  # 这个对象包含一个属性,名称是阿黄


http://www.mrgr.cn/news/63679.html

相关文章:

  • 【element ui系列】分享几种实现el-table表格单选的方法
  • 哪个牌子的宠物空气净化器好?口碑好的宠物空气净化器推荐!
  • C++设计模式创建型模式———简单工厂模式、工厂方法模式、抽象工厂模式
  • 棋牌游戏防ddos攻击,高防IP好用吗?
  • CentOS 9 Stream 上安装 Redis
  • (七)JavaWeb后端开发1——Maven
  • C. Gorilla and Permutation
  • 打响反对人工智能的第一枪
  • 多处理机调度(李昂学长视频总结)25新增考点
  • 音视频入门基础:FLV专题(22)——FFmpeg源码中,获取FLV文件音频信息的实现(中)
  • 奇瑞不客气智驾 晚不晚?
  • 浅谈DDD(领域驱动设计)
  • 齐次线性微分方程的解的性质与结构
  • 云计算的优势及未来发展趋势
  • 【Leecode】Leecode刷题之路第37天之解数独
  • 1007:计算(a+b)×c的值
  • 事件的传递
  • java基础知识21 异常处理try与throw的相互处理e.getcause
  • 第一讲 递推与递归
  • 【qt qtcreator使用】【正点原子】嵌入式Qt5 C++开发视频
  • 一些swift问题
  • 高频电子线路---倍频器与振荡器
  • dijkstra
  • 【软服之家-注册安全分析报告-无验证方式导致安全隐患】
  • 2-140 基于Solidworks和Matlab Simulink Simscape仿真的机器人手臂仿真
  • Go-Sqlite3学习