类外部添加和获取对象的属性
# 定义类
class Dog(object):
# 在类中定义的函数,称为方法,函数的所有知识都可以使用
def play(self):
print("小狗正在玩耍.....")
# 创建对象 变量 = 类名()
dog = Dog() # 类名()创建对象
dog.play()
# 给对象添加属性 对象.属性名 = 值
dog.name = "旺财"
dog.age = 3
# 获取对象的属性 对象.属性名
print(dog.name)
print(dog.age)
# 修改对象的属性 和添加属性一样,存在则修改,不存在则添加
dog.name = "小黑"
print(dog.name)
dog1 = Dog()
dog1.name = "小白"
dog1.age = 2
print(dog1.name)
print(dog1.age
类内部操作属性
class Dog(object): # self 就是一个形参明名字,可以写成其他形参明,一般不修改这个名字,默认是self
# self 作为类中方法的第一个形参,在通过对象调用方法时,不需要手动传递实参,是python解释器自动调用该方法的对象传递给self,所以self这个形参代表的是一个对象
def paly(self):
print(f'self:{id(self)}')
print(f'{self.name}正在玩耍......')
dog = Dog()
dog.name = '旺财'
print(f'dog:{id(dog)}')
dog.paly()
dog2 = Dog()
dog2.name = '小黑'
print(f'dog2:{id(dog2)}')
dog2.paly()
魔法方法
[!tip|style:flat|label:提示]
在 python 的类中,有一类方法,这类方法以
两个下划线开头和两个下划线结尾,并且在满足某个特定条件的情况下,会自动调用,这类方法,称为魔法方法如何学习魔法方法
- 魔法方法在什么情况下会自动调用
- 这个方法有什么作用
- 这个魔法方法有哪些主要事项
# __init__
# 调用时机:在创建对象之后,会立即调用
# 作用:
# 1. 用来给对象添加属性,给对象一个初始值(构造函数)
# 2. 代码的业务需求,每创建一个对象,都需要执行的代码可以写在__init__里面
# 注意点:如果`__init__`方法中,有出了 self 之外的形参,那么在创建的对象的时候,需要给额外的形参传递实参值
# `类名(实参)`
class Dog(object):
def __init__(self):
print('我是__init__方法,我被调用了')
self.name = 'Tom'
self.age = 18
# 创建一个对象
Dog()
dog = Dog()
print(dog.name)
dog1 = Dog()
print(dog1.name)
# 带参数的__init__方法
class Dog(object):
def __init__(self, name):
print('我是__init__方法,我被调用了')
self.name = name
def play(self):
print(f'小狗{self.name}正在快乐的拆家中。。。')
# 创建一个对象
dog = Dog('小白')
print(dog.name)
dog.play()
dog1 = Dog('小黑')
print(dog1.name)
dog1.play()
[!tip|style:flat|label:提示]
__str__调用时机:
- print(对象),会自动调用
__str__方法,打印输出的结果是__str__方法的返回值str(对象)类型转换,将自定义的对象转换成字符串的时候会自动调用应用:
- 打印对象的时候,输出一些属性的信息
- 需要将对象转换为字符串类型的时候
主意点:
方法必须返回一个字符串,只有 self 一个参数
class Dog(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return '小狗的名字是:%s,年龄是:%d' % (self.name, self.age)
# 创建一个Dog对象
dog = Dog('旺财', 2) #
print(dog) # 没有定义__str__方法之前:print(对象)默认输出对象的内存地址
[!tip|style:flat|label:提示]
析构函数
调用时机:
对象在内存中被销毁删除的时候(引用计数为0)会自动调用
`__del__方法
- 程序代码运行结束,在程序运行过程中,创建的所以对象和变量都会被删除销毁
- 是用
del变量,将这个对象的引用计数为 0 会自动调用__del__应用场景
对象删除销毁的时候,要书写的代码可以写在
__del__中一般很少使用引用计数:是python内存管理的一种机制,是指一块内存,有多少个变量在引用
- 当一个变量,引用一块内存的时候,引用计数加 1
- 当删除一个变,或者这个变量不在引用这块内存,引用计数减 1
- 当内存的引用计数变为 0 的时候,这块内存被删除,内存中的数据被销毁
my_list = [1,2] # 1
my_list1 = my_list #2
del my_list #1
del my_lis1t #0
class Dog(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return '小狗的名字是:%s,年龄是:%d' % (self.name, self.age)
def __del__(self):
print(f'{self.name}被销毁了!')
# 创建一个Dog对象
dog = Dog('旺财', 2)
dog1 = dog
print('删除前')
del dog # dog 变量不能再使用,旺财引用计数 1
print('删除后')
print('删除前')
del dog1 # dog1 变量不能再使用,旺财引用计数 0 ,会立即销毁
print('删除后')