Python中关于‘self’的种种用法笔记

方法中的 self 参数

  1. 给对象增加属性

先来看个例子:

class Cat:
    def eat(self):
        print("%s 爱吃鱼" % self.name)

在 Python 中,要 给对象设置属性,非常的容易,但是不推荐使用

tom.name = "Tom"
lazy_cat.name = "大懒猫"

因为:对象属性的封装应该封装在类的内部 只需要在 类的外部的代码 中直接通过 . 设置一个属性即可
注意:这种方式虽然简单,但是不推荐使用!

使用 self 在方法内部输出每一只猫的名字 由 哪一个对象 调用的方法,方法内的 self 就是 哪一个对象的引用 在类封装的方法内部,self 就表示 当前调用方法的对象自己 调用方法时,程序员不需要传递 self 参数 在方法内部 可以通过 self. 访问对象的属性 也可以通过 self. 调用其他的对象方法

改造代码如下:

class Cat:
    def eat(self):
        print("%s 爱吃鱼" % self.name)


tom = Cat()
# tom.eat()
# 给对象临时增加属性
tom.name = "Tom" 
# 现在调用就没问题
tom.eat()
lazy_cat = Cat()
lazy_cat.name = "大懒猫"
lazy_cat.eat()

运行结果如下:
“”"
Tom 爱吃鱼
大懒猫 爱吃鱼
“”"

在 类的外部,通过 变量名. 访问对象的 属性和方法
在 类封装的方法中,通过 self. 访问对象的 属性和方法
在类的外部给对象增加属性
将案例代码进行调整,先调用方法 再设置属性,观察一下执行效果

python tom = Cat()
tom.drink()
tom.eat()
tom.name = "Tom"
print(tom)

# 程序执行报错如下:
# AttributeError: 'Cat' object has no attribute 'name' 属性错误:'Cat' 对象没有 'name' 属性

提示

  • 在日常开发中,不推荐在 类的外部 给对象增加属性
  • 如果在运行时,没有找到属性,程序会报错
  • 对象应该包含有哪些属性,应该 封装在类的内部
  1. 未完待续
posted @ 2019-01-11 16:57  onefine  阅读(256)  评论(0编辑  收藏  举报