一、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 = name
def 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 = name
def __str__(self):
return f'这个对象包含一个属性,名称是{self.name}'
def eat(self):
print(f'小狗{self.name}吃骨头')
dog1 = Dog('旺财')
print(dog1) # 这个对象包含一个属性,名称是旺财
print('*' * 20)
dog2 = Dog('阿黄')
print(dog2) # 这个对象包含一个属性,名称是阿黄