美文网首页
Python | 魔法属性 | 魔法方法

Python | 魔法属性 | 魔法方法

作者: CarryLili | 来源:发表于2019-08-08 18:59 被阅读0次

前言

在python中,以前后各有两个下划线的这种方式命名的标识符,称为魔法属性,或魔法方法,这些魔法属性或魔法方法,是python中内置的,预先定义好一些功能的属性或方法。接下来就分别介绍它们。

init 方法的基本使用与代码解析

  • init 方法的作用是为对象进行初始化 initialization,该方法会在创建对象时,自动调用
  • 一般会将对象所具有的属性放到这个方法中,进行初始化,不在使用动态绑定为对象添加属性
  • 使用方法: self.属性名 = 值 的方式添加属性
'''
 通过 __init__  方法来为对象进行初始化
'''
# 定义一个学生类
class Student(object):
    # 实现 __init__ 方法
    def __init__(self):
        print('Init Run ...')
        # 添加属性
        self.name = 'tom'
        self.age = 12

tom = Student()
print(tom.name)
print(tom.age)

jack = Student()
# 对属性的修改
jack.name = 'Jack'
print(jack.name)
print(jack.age)

结果如下:

Init Run ...
tom
12
Init Run ...
Jack
12
问题?

在类的方法里定义属性的固定值,则每隔对象实例变量的属性值都是相同的,有什么办法可以让实例的每个对象都有不同的属性值?

带参数的init方法使用与代码解析

  • 通过一个类,可以创建多个对象,就好比 通过一个模具创建多个实体一样
  • init(selt)中,默认只有一个参数,如果在创建对象时传递了2个实参,那么init(selt)中出现了self作为第一个形参外,还需要2个形参,例如:init(selt,x,y) 代码解析如下:
'''
通过 init 方法,传入相应的参数,利用这些参数为对象的属性进行初始化
'''

class Student(object):
    # 实现 带参数的init方法
    def __init__(self, new_name,new_age):

        # 添加 属性
        self.name = new_name
        self.age = new_age
        print(f'{self.name} Init Run')

# 实例一个对象
tom = Student('tom',12)
print(tom.name)
print(tom.age)


jack = Student('Jack',22)
print(jack.name)
print(jack.age)

结果如下:

tom Init Run
tom
12
Jack Init Run
Jack
22

str 使用方法及代码解析

  • 当使用print输出对象时,默认打印对象的内存地址。如果类定义了str(self)方法,那么就会打印从这个方法中return的数据
  • str方法通常返回一个字符串,作为这个对象的描述信息 代码解析如下:
class Cat(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 实现__str__ 方法
    # 该 方法必须 返回一个字符串类型的数据
    def __str__(self):
        # return f'[姓名:{self.name} 年龄:{self.age}]'
        # return f'{"name":{self.name}, "age":{self.age}}' # 因为{}的原因,所以不行
        # return '{name:%s, age: %d}' %(self.name,self.age)
        return '{' + f'name:{self.name}, age:{self.age}' + '}'


tom = Cat('Tom', 1)
print(tom)

jack = Cat('Jack',2)
print(jack)


#调用str方法,把对象tom传入,得到的结果一样
stu_string = str(tom)

结果如下:

{name:Tom, age:1}
{name:Jack, age:2}
#调用方法后的结果,和上面结果一样
{name:Tom, age:1}
{name:Jack, age:2}

del方法使用及代码解析

  • 当删除对象后,python解释器也会默认调用一个方法,就是del()
  • 当有变量保存了一个对象的引用时,此对象的引用计数就会加1
  • 当使用del()删除变量指向的对象时,则会减少对象的引用计数。如果对象的引用计数不为1,那么会让这个对象的引用计数减1,当对象的引用计数为0时,则对象才会被真正的删除(内存被回收)。
'''
__del__方法
用来在销毁对象时自动 调用 该 方法
'''

class Cat(object):
    def __init__(self):
        self.childs = ['tom1','tom2','tom2']

    def __del__(self):
        # 在销毁当前对象之前,将自己管理的属性对象先销毁,回收资源
        # del self.childs
        print('Del Run ...')


tom = Cat()
# del tom

tom.childs


print('over')

结果如下:

over
Del Run ...

改变del方法代码后:

    def __del__(self):
        # 在销毁当前对象之前,将自己管理的属性对象先销毁,回收资源
        del self.childs
        print('Del Run ...')


tom = Cat()
del tom

tom.childs

print('over')

删除之后结果如下:

Traceback (most recent call last):
NameError: name 'tom' is not defined
Del Run ...

相关文章

  • Python | 魔法属性 | 魔法方法

    前言 在python中,以前后各有两个下划线的这种方式命名的标识符,称为魔法属性,或魔法方法,这些魔法属性或魔法方...

  • 2018-09-07-类和对象

    一、内置类属性(魔法属性) 内置类属性就是魔法属性魔法属性:属性名的前面和后面都有两个下划线魔法方法:方法的前面和...

  • python 魔法方法

    内置魔法方法参见:官网:Python数据模型Python 魔术方法指南 ——稍微有点乱 Python魔法方法指南...

  • 2018-09-07 day15-类和对象

    总结 一.内置类属性 内置类属性就是魔法属性魔法属性就是属性名前后都有两个下划线,魔法方法就是方法前后都有两个下划...

  • 2018-09-07-day15-类和对象

    内置类属性 内置类属性就是魔法属性 魔法属性: 属性名前后都有两个下划线 魔法方法: 方法的前后都有两个下划线 案...

  • Day15—类和对象2

    1 内置类属性 内置类属性就是魔法属性魔法属性:属性名的前面和后面都有两个下划线。魔法方法:方法的前后都有两个下划...

  • 2018-09-07类和对象2(day15)

    一、内置类属性 内置类属性就是魔法属性 魔法属性:属性名的前面和后面都有两个下划线 魔法方法:方法的前后都有两个下...

  • 类和对象

    一.内置类属性 内置类属性就是魔法属性,魔法属性:属性名的前面和后面都有两个下划线.魔法方法:方法的前后都有两个下...

  • 2018-09-07 Day15 类和对象2

    01.内置类属性 1.内置类属性就是魔法属性a.魔法属性:属性名的前后都有两个下划线b.魔法方法:方法的前后都有两...

  • day15类和对象

    01-内置类属性 内置类属性就是魔法属性魔法属性:属性名的前面和后面都有两个下划线魔法方法:方法的前后都有两个下划...

网友评论

      本文标题:Python | 魔法属性 | 魔法方法

      本文链接:https://www.haomeiwen.com/subject/ppixjctx.html