Python 面向对象 特殊方法

Python 的特殊方法,两边带双下划线的方法。

比如:__init__(self, ...)、__del__(self)

1、__init__(self,...) : 构造方法

  __init__(self, ...)  构造方法,这个方法在创建对象时,自动触发执行。实例化类格式: 类名() 

class Phone:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year
        print("执行 __init__ 方法")

p = Phone(‘小米‘, 2018)   # 自动执行类中的 __init__ 方法

结果:
执行 __init__ 方法

2、__del__(self):析构方法

  析构方法,当对象在内存中被释放时,或者手动调用del方法,自动触发执行。

  注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,
    因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

>>> class Phone:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year
        print("执行 __init__ 方法")

    def __del__(self):
        print("执行 __del__ 方法")

>>> p = Phone(‘小米‘, 2018)   # 自动执行类中的 __init__ 方法
执行 __init__ 方法
>>> del p
执行 __del__ 方法
>>> 

3、__new__(): 定义如何创建对象

  类名() 创建对象时,在自动执行 __init__()方法前,会先执行 object.__new__方法,在内存中开辟对象空间并返回

>>> class Phone:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year
        print("执行 __init__ 方法")

    def __new__(cls, *args, **kwargs):
        print("执行 __new__ 方法")
        return object.__new__(cls)

>>> p = Phone(‘小米‘, 2018)   # 自动执行类中的 __init__ 方法
执行 __new__ 方法
执行 __init__ 方法
>>>
1 类名() 执行object.__new__方法,在内存中开辟对象空间并返回;
2 自动执行__init__方法,将对象空间创给self;
3 在__init__给对象封装属性。

# 单例模式: 一个类只能实例化一个对象
class Phone:
    __instance = None

    def __init__(self, brand, year):
        self.brand = brand
        self.year = year

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
        return cls.__instance

p1 = Phone(‘小米‘, 2018)
p2 = Phone(‘华为‘, 2017)
p3 = Phone(‘魅族‘, 2016)

print(p1)
print(p2)
print(p3)

结果:
<__main__.Phone object at 0x000001C5B2286160>
<__main__.Phone object at 0x000001C5B2286160>
<__main__.Phone object at 0x000001C5B2286160>

 4、__module__ 和 __class__

  __module__ : 表示当前操作的对象在那个模块,本模块 : __main__

  __class__     : 表示当前操作的对象的类是什么

>>> class Phone:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year

>>> p = Phone(‘小米‘, 2018)
>>> p.__module__
‘__main__‘
>>> p.__class__
<class ‘__main__.Phone‘>
>>> 

5、__call__

  __call__:对象后面加括号,触发执行。

>>> class Phone:
    def __init__(self):
        pass
    def __call__(self, *args, **kwargs):
        print(‘执行 __call__ 方法‘)

>>> p = Phone()
>>> p()
执行 __call__ 方法
>>> 

原文地址:https://www.cnblogs.com/51try-again/p/10403577.html

时间: 2024-09-28 22:22:34

Python 面向对象 特殊方法的相关文章

python面向对象魔术方法补充

一.描述符 在 面向对象 编程中 定义一个(没有定义方法)类:class person , 在这个类里面,有name,age, heigth, weight,等等属性, 这个类就可以看作一个对 person 的描述符,而具体的实例则是具体的“被描述物”. 而在python中,描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议. __get__():调用一个属性时,触发 __set__():为一个属性赋

python面向对象析构方法-----&gt; __del__方法

1.什么时候用法析构方法. 在对象资源被释放的时候触发. 2.使用场景. 帮助清理资源,比如python解释器清理不掉的资源. 例子: class Foo: def __init__(self,x): self.x=x def __del__(self): #在对象资源被释放时触发 print('现在是__del__执行') f=Foo(100000) del f #这个步骤在释放资源,这个时候会触发函数中的__del__函数中定义的方法. print('====================

python面向对象之方法

类成员:字段+方法+属性 字段:普通(实例对象,每个对象保存一次)+静态(全局变量,只保存一次,所有方法共享) 方法:普通方法(实例方法:self.fun())+类方法(@classmathod)+静态方法(所有方法分类) 属性:方法属性 #1普通方法:(使用较多) #encoding=utf-8 class Foo: def __init__(self, name): self.name = name def ord_func(self): """ 定义普通方法,至少有一个

python面向对象----- __str__方法

1.__str__的作用 打印对象的时候,将__str__中定义的内容返回出来. 例子: class People: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def __str__(self): #在对象被打印时触发执行 return '<name:%s age:%s sex:%s>' %(self.name,self.age,self.sex) #只能返回字符串 p1=People('

Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在python2.x中,若没指定父类,则不会以object作为基类. 2)旧式类(经典类):在定义类时,类后边括号中不用继承object类,甚至不用括号. 3)dir方法是用来查看类的内置方法. 二.私有方法和属性 1)私有属性是对象不希望公开的属性:私有方法是对象不希望公开的方法.在定义私有属性和方法时,在属

Python面向对象之反射,双下方法

一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) class Foo:    f = '

如何用Python的面向对象编程方法节约代码

如何用对象继承来减少量化策略代码量 在真格量化的API文档里我们经常遇到"bal.CashBalance"."order.id"这类看起来非常诡异的变量写法.这都是些什么东西呢? 这得从"面向对象"(Object Oriented)的编程思想说起. 首先,"对象"可以是我们想研究的任何事物,从一个自然数到一个星系,都可以视为对象.它不仅可以是具体的事物,比如一吨大豆,还可以是更抽象的规则,比如大豆期货合约. 其次,对象具有状态

Python面向对象反射,双下方法

一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 对实例化对象的示例 class Foo

Python 面向对象class(2)

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定