python面向对象基础之常用魔术方法

一、类和对象

通俗理解:类就是模板对象就是通过模板创造出来的物体

类(Class)由3个部分构成:

类的名称: 类名

类的属性: 一组数据

类的方法: 允许对进行操作的方法 (行为)

二、魔法方法

在python中,有一些内置好的特定的方法,方法名是“__xxx__”,在进行特定的操作时会自动被调用,这些方法称之为魔法方法。下面介绍几种常见的魔法方法。

1.__init__方法 :初始化一个 ,在创建实例对象为其 赋值 时使用。

2.__str__方法:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息。

3.__new__方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。

4.__class__方法:获得已知对象的类 ( 对象.class)。

5.__del__方法:对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源

三、理解self

self和对象指向同一个内存地址,可以认为self就是对象的引用。

# 创建一个类
class Car(object):
 	# 创建一个方法打印 self 的id
 	def getself(self):
 		print('self=%s'%(id(self))) 

bmw = Car()
print(id(bmw))
bmw.getself()
'''输出
140033867265696
140033867265696
'''

所谓的self,可以理解为对象自己,某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可。

# 创建一个类
class Car(object):
	def __init__(self,name,colour):
		self.name = name
		self.colour = colour
	# 创建一个方法打印 self 的id
	def getself(self):
		print('self=%s'%(id(self))) 

bmw = Car('宝马','黑色')
# 实例化对象时,self不需要开发者传参,python自动将对象传递给self
print(id(bmw))
bmw.getself()

四、练习对战

做两个人物对战

import random
import time
#定义类
class hero(object):
    # 定义属性
    def __init__(self,name,blood,dblood,ablood):
        self.name=name#名字
        self.blood=blood#血量
        self.dblood=dblood#这是减少的血量
        self.ablood=ablood
    #定义方法
    # 互捅
    def tong(self,enemy):
        enemy.blood-=self.dblood
        print('%s砍掉了%s%d的血量'%(self.name,enemy.name,self.dblood))

    def addblood(self):
        self.blood+=self.ablood
        print('%s吃了一颗补血药,加了%d血量'%(self.name,self.ablood))

    def __str__(self):
        return '%s 还剩下 %s 血' % (self.name, self.blood)

xm = hero('西门吹雪',100,random.randint(10,20),random.randint(10,20))
ygc = hero('叶孤城',100,random.randint(10,20),random.randint(10,20))

x=[1,2]

while xm.blood>=0 or ygc.blood>=0:
    if xm.blood<=0:
        print('%s获胜'%ygc.name)
        break
        pass
    elif ygc.blood<=0:
        print('%s获胜'%xm.name)
        break
    if 10<=xm.blood <=20:
        xm.addblood()
        pass
    elif 10 <= ygc.blood <= 20:
        ygc.addblood()
        pass
    if random.choice(x)%2==0:
        xm.tong(ygc)
        print(ygc)
        print(xm)
    else:
        ygc.tong(xm)
        print(ygc)
        print(xm)
    print('***'*10)
    time.sleep(1)
    pass

到此这篇关于python面向对象基础之常用魔术方法的文章就介绍到这了,更多相关python魔术方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 类的魔法属性用法实例分析

    本文实例讲述了Python 类的魔法属性用法.分享给大家供大家参考,具体如下: 魔法属性 无论人或事物往往都有不按套路出牌的情况,Python的类属性也是如此,存在着一些具有特殊含义的属性,详情如下: 1. doc 表示类的描述信息 class Foo: """ 描述类信息,这是用于看片的神奇 """ def func(self): pass print(Foo.__doc__) #输出:类的描述信息 2. module 和 class modu

  • Python魔术方法专题

    _del_ 类的析构方法,它在对象被回收时执行,主要的作用时用来释放资源(内存 文件 进程等) 因为Python内存回收机制,使得Python的del方法的执行时间是不确定的,因此不推荐在Python中使用析构方法. class Bar(object): def __del__(self): print("被回收了! -") a = Bar() a.__del__() # 主动调用是没用的,因为引用计数不为零,并不会回收资源 gc print("已经删除a了") p

  • Python中的__new__与__init__魔术方法理解笔记

    很喜欢Python这门语言.在看过语法后学习了Django 这个 Web 开发框架.算是对 Python 有些熟悉了.不过对里面很多东西还是不知道,因为用的少.今天学习了两个魔术方法:__new__ 和 __init__. 开攻: 如果对 Python 有所简单了解的话应该知道它包含类这个概念的.语法如下: 复制代码 代码如下: class ClassName:     <statement - 1>:         .         .           .     <state

  • Python黑魔法远程控制开机的实例

    python黑魔法~只要知道你电脑的ip,远程控制便可开机,嘻嘻<只能用来学习哦~不可恶作剧哈> def wake_up(request, mac='DC-4A-3E-78-3E-0A'): MAC = mac BROADCAST = "192.168.0.255" if len(MAC) != 17: raise ValueError("MAC address should be set as form 'XX-XX-XX-XX-XX-XX'") ma

  • Python魔法方法详解

    据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的. Python 的魔术方法非常强大,然而随之而来的则是责任.了解正确的方法去使用非常重要! 魔法方法 含义 基本的魔法方法 __new__(cls[, ...]) new 是在一个对象实例化的时

  • Python面向对象魔法方法和单例模块代码实例

    魔法方法 ​ 凡是在类内部定义,以"__开头__结尾"的方法都称之为魔法方法,又称"类的内置方法", 这些方法会在某些条件成立时触发. 经常用到的双下方法 __init__: 在调用类时触发. __delarttr__: __getattr__: 会在对象.属性时,"属性没有"的情况下才会触发.对象.__dict__[属性]不会触发__getattr__,会报keyerror: __getattribute__:会在对象.属性时触发,不管有没有该

  • Python魔术方法详解

    介绍 此教程为我的数篇文章中的一个重点.主题是魔术方法. 什么是魔术方法?他们是面向对象的Python的一切.他们是可以给你的类增加"magic"的特殊方法.他们总是被双下划线所包围(e.g. __init__ 或者 __lt__).然而他们的文档却远没有提供应该有的内容.Python中所有的魔术方法均在Python官方文档中有相应描述,但是对于他们的描述比较混乱而且组织比较松散.很难找到有一个例子(也许他们原本打算的很好,在开始语言参考中有描述很详细,然而随之而来的确是枯燥的语法描述

  • Python类型转换的魔术方法详解

    本文讨论python中将某个复杂对象转换为简单对象或数据类型的常用魔术放啊,这些在编程中是十分有用的. 1.__str__方法. 在讲解本方法前我们先打开一个jupyter notebook,随意创建一个类如下,使用str()方法输出该类的实例看看返回了什么: class BarChart(object): def __init__(self, x, y, labels,color): self.x = x self.y = y self.labels = labels self.color =

  • Python魔法方法 容器部方法详解

    这篇文章主要介绍了Python魔法方法 容器部方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 为了加深印象,也为了以后能够更好的回忆,还是记录一下. 序列(类似集合,列表,字符串),映射(类似字典)基本上是元素的集合,要实现他们的基本行为(协议),不可变对象需要两个协议,可变对象需要4个协议. __len__(self):返回元素的数量,(为不可变对象需要的协议之一)=====> len __iter__返回一个迭代器,具有了__nex

  • 在Python中画图(基于Jupyter notebook的魔法函数)

    这篇文章主要介绍了在Python中画图(基于Jupyter notebook的魔法函数),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先展示一段相关的代码: #we test the accuracy of knn and find the k which makes the biggest accuracy k_range=list(range(1,26))#[1,25] scores=[] for k in k_range: knn=KN

  • python魔法方法-属性访问控制详解

    属性访问控制 所谓的属性访问控制就是控制点号访问属性的行为,而且不仅是类的外部,连类的内部也受控制,代码见真章,边看代码边解释: •__getattr__(self, item) 定义当访问不存在的属性时的行为,注意是不存在的属性. class Foo(object): def __init__(self, value): self.value = value def __getattr__(self, item): print item # 查看得到的参数是什么 print type(item

  • Python魔法方法功能与用法简介

    本文实例讲述了Python魔法方法功能与用法.分享给大家供大家参考,具体如下: 1.什么是魔法方法? 魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动触发的.它们经常是两个下划线包围来命名的(比如 __init__,__lt__),Python的魔法方法是非常强大的,所以了解其使用方法也变得尤为重要! 2.__init__(self[, ...]),__ne

随机推荐