类和对象

类(Class) 由3个部分构成

01). 类的名称:类名

02). 类的属性:一组数据

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

定义类

object 是Python 里所有类的最顶级父类; 类名 的命名规则按照"大驼峰命名法"; info 是一个实例方法,第一个参数一般是self,表示实例对象本身,当然了可以将self换为其它的名字,其作用是一个变量 这个变量指向了实例对象

(Dog) 属性:品种 、毛色、性别、名字、 腿儿的数量

方法(行为/功能):叫 、跑、咬人、吃、摇尾巴

class Dog(object):name = "jack"sex = "雌性"cocler = "黑色"def run(self):  #实例化方法print("跑  跳  叫 吃 摇尾巴 ")dg = Dog()  #实例化对象
print(dg.name)
print(dg.sex)
print(dg.cocler)
dg.run()

结果

创建对象 

python中,可以根据已经定义的类去创建出一个或多个对象。

创建对象的格式为:(实例化对象) 对象名1 = 类名()

对象名2 = 类名()

对象名3 = 类名()

添加和获取对象的属性

#定义英雄类
class Hero(object):#实例化方法def move(self):print("正在移动。。。")def attack(self):print("发动攻击。。。")yasuo = Hero()   #实例化英雄的对象
#添加对象的属性值
yasuo.name = "亚索"
yasuo.xl = 460
yasuo.gs = 0.5
# 获取对象的值
print("英雄 %s 的名字是 %s是血量 %s是攻速" %(yasuo.name,yasuo.xl,yasuo.gs))
#通过成员选择获取对象的实例方法
yasuo.move()
yasuo.attack()

结果

 在方法内通过self获取对象属性

#定义英雄类
class Hero(object):
#方法用例做初始化 赋值   在类实例化对象时候被自动调用def __init__(self):self.name = "亚索"self.xl = 460self.gs = 0.4#实例化方法def move(self):print("正在移动。。。")def attack(self):print("发动攻击。。。")def info(self):#在类实例化方法中,通过self获取对象属性self.name = self.nameself.xl = self.xlself.gs = self.gsprint("英雄 %s 的名字是 %s是血量 %s是攻速" %(self.name,self.xl,self.gs))yasuo = Hero()   #实例化英雄的对象
#添加对象的属性值
# yasuo.name = "亚索"
# yasuo.xl = 460
# yasuo.gs = 0.5
# 获取对象的值
# print("英雄 %s 的名字是 %s是血量 %s是攻速" %(yasuo.name,yasuo.xl,yasuo.gs))
#通过成员选择获取对象的实例方法
yasuo.info()  #只需要调用实例化方法info()
yasuo.move()
yasuo.attack()

结果

魔法方法 __init__()方法

__init__()方法,在创建一个对象时默认被调用,不需要手动调用 __init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。

 有参数的__init__()方法

说明:

通过一个类,可以创建多个对象,就好比 通过一个模具创建多个实体一样

__init__(self)中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)中出了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)

注意:

1). 在类内部获取 属性 和 实例方法,通过self获取;

2). 在类外部获取 属性 和 实例方法,通过对象名获取。

3). 如果一个类有多个对象,每个对象的属性是各自保存的,都有各自独立的地址;

4). 但是实例方法是所有对象共享的,只占用一份内存空间。类会通过self来判断是哪个对象调用了实例方法。

#定义英雄类
class Hero(object):
#方法用例做初始化 赋值   在类实例化对象时候被自动调用def __init__(self,name,xl,gs):#传递的参数self.name =nameself.xl = xlself.gs = gs#实例化方法def move(self):print("正在移动。。。")def attack(self):print("发动攻击。。。")def info(self): # 在类实例化方法中,通过self获取对象属性print("英雄 %s 的名字是 %s是血量 %s是攻速" %(self.name,self.xl,self.gs))
yasuo = Hero("亚索",460,0.4)   #实例化英雄的对
gailun = Hero("盖伦",379,0.66)
#通过成员选择获取对象的实例方法
yasuo.info()  #只需要调用实例化方法info()
yasuo.move()
yasuo.attack()
gailun.info() #只需要调用实例化方法info()

结果
魔法方法:__str__()方法

说明:

在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法 当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__(self)方法,那么就会打印从在这个方法中 return 的数据 __str__方法通常返回一个字符串,作为这个对象的描述信息

#定义英雄类
class Hero(object):
#方法用例做初始化 赋值   在类实例化对象时候被自动调用def __init__(self,name,xl,gs):#传递的参数self.name =nameself.xl = xlself.gs = gs#实例化方法def move(self):print("正在移动。。。")def attack(self):print("发动攻击。。。")# def info(self): # 在类实例化方法中,通过self获取对象属性#     print("英雄 %s 的名字是 %s是血量 %s是攻速" %(self.name,self.xl,self.gs))def __str__(self):return "英雄 %s 的名字是 %s是血量 %s是攻速" %(self.name,self.xl,self.gs)
yasuo = Hero("亚索",460,0.4)   #实例化英雄的对
gailun = Hero("盖伦",379,0.66)
print(yasuo)
print(gailun)
yasuo.move()
yasuo.attack()

魔法方法:__doc__()方法

#定义英雄类
class Hero(object):'''123456789'''
#查看类的文档说明,也就是类的注释print(Hero.__doc__)

结果

魔法方法:__del__()方法

    class Hero(object):# 方法用例做初始化# 赋值# 在类实例化对象时候被自动调用def __init__(self,name):print("-del-方法被调用了")self.name = name#当对象删除后会自动调用def __del__(self):print("%s 被 干掉了...." % self.name)
#创建对象
yasuo = Hero("亚索")
#删除
print("%d 被删除 " % id(yasuo))
del(yasuo)
print("-----" * 10)
魔法方法 __call__

如果一个类中定义了__call__方法,对象后面加括号,会触发执行__call__方法

调用__call__ 方法,对象()或者是类()()

class Dog(object):def __init__(self,name,age):self.name =nameself.age = agedef __call__(self, eat):print('姓名是 %s and %s 年' % (self.name,self.age))print('I like eating %s' % eat)
p = Dog('Bob', 3)
p("bones")

Python中面向对象self获取对象属性,魔法方法相关推荐

  1. java mocked,JMockit 中被 Mocked 的对象属性及方法的默认值

    前脚研究完 Mockito 中被 Mocked 的对象属性及方法的默认值, 虽然目今更多的是拥抱着 Mockito, 但总有时对 JMockit 也会挤眉弄眼,谁叫 JMockit 无所不能呢!被 M ...

  2. Mockito 中被 Mocked 的对象属性及方法的默认值

    在 Java 测试中使用 Mockito 有段时日了,以前只是想当然的认为 Mock 的对象属性值和方法返回值都是依据同样的规则.基本类型是 0, 0.0, 或 false, 对象类型都是 null, ...

  3. python中类似对象吗_确定对象是否为Python中类似字节的对象的正确方法是什么?...

    除非您知道我们不了解的内容,否则此代码是不正确的: if isinstance(data, bytes): data = data.decode() 您(似乎)不知道27007050676610010 ...

  4. js中获取对象属性的3种方式

    js中遍历获取对象属性和方法主要有Object.keys().Object.getOwnPropertyNames().for-in- 区别 1.for in会输出自身以及原型链上可枚举的属性.2.O ...

  5. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感...

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  6. python中requests库的用途-python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也 ...

  7. SICP2——Python中使用函数构建对象

    一.使用对象构建抽象 1.1 数据抽象 现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示对象.-根本不必考虑它们到底代表着什么东西. 上一篇文章主要强调的是对数据的操作以及这些操作之间的组合与 ...

  8. Python之面向对象类和对象

    Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object):"""类里定义一类事物共同的技能.可以是变量,也可是函数.& ...

  9. python getattr调用自己模块_在Python中通过getattr获取对象引用的方法

    getattr函数 (1)使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用. >>> li = ["Larry", "Curly ...

最新文章

  1. pandas XLRDError Excel xlsx file; not supported 解决办法
  2. metasploit 模块和位置
  3. 来自法国的山寨苹果系统——梨子系统PearOS,精美仿苹果风格的免费Linux操作系统(颇有iOS和OSX的神...
  4. javaweb火车车次信息管理+文件_厦门火车站启动“双十一”电商黄金周运输 投入列车数量为历年新高...
  5. ES亿级数据检索优化,三秒返回突破性能瓶颈
  6. socket与socketServer通信
  7. HTML5+CSS3+JQuery1.9 输入框切换和Div失焦模拟
  8. Oracle online系列(下):online indexbuild
  9. 【LeetCode】11. Container With Most Water 解题小结
  10. X86汇编语言从实模式到保护模式19:分页和动态页面分配
  11. 新世纪英汉科技大词典_大科技的业务统治达到新的高度
  12. [附源码]Java计算机毕业设计SSM公立医院绩效考核系统
  13. Windows安装WSL详解
  14. CAS算法中的ABA问题的解决
  15. Digital Radiography厂家
  16. HCIA 学习笔记 准备考试
  17. 互联网产品经理核心素质能力模型
  18. 解决“双系统删除其中一个,BIOS仍然有其启动项”问题
  19. 基于PIE-Engine的新疆地区棉花种植面积提取
  20. termux搭建mc服务器

热门文章

  1. qfile指定从多少行开始_技术者丨你对JavaScript知多少(第四期)
  2. Java 发邮件-带附件且正文html格式
  3. CAD .Net开发-标注样式去掉箭头
  4. php多用户数据隔离方案,Laravel jwt 多表(多用户端)验证隔离
  5. CentOS 下载安装离线程序包
  6. 网闸前后端的接口不一致导致webservice接口无返回
  7. 1015 : 二次方程的实根
  8. CSDN博客写文章如何选择封面,看完这篇博客就够了(数千字手把手教学)
  9. 微信小程序app.js中的全局变量globalData改变,如何通知其它页面界面显示改变,小程序中如何在其他页面中监听到globalData中值的变化
  10. 微信小程序开发 - 修改globalData的值