类的使用:实例化、属性引用

实例化

g1 = Garen('草丛伦1') # 实例化

g2 = Garen('草丛伦2')

g3 = Garen('草丛伦3')

类的属性:变量和函数

print(Garen.camp)

print(Garen.attack)

print(Garen.dict)

结果:
{'__module__': '__main__', '**camp**': 'Demecia', 'n': 3, '__init__': <function Garen.__init__ at 0x000000000231BB70>, '**attack**': <function Garen.attack at 0x000000000231BBF8>, '__dict__': <attribute '__dict__' of 'Garen' objects>, '__weakref__': <attribute '__weakref__' of 'Garen' objects>, '__doc__': None} 通过print(Garen.__dict__)能输出Garen类的名称空间,是一个字典,当我们进行使用的时候,实际是查找的是字典的key,通过key找相应的值 对类的变量的修改就是对其字典进行的修改:
```python
Garen.camp = '123' # 找到字典的key--camp,修改camp的值为123
Garen.x = '123' # 在字典中新增一组

对象

对象也有一个名称空间(这个名称空间中国只有变量),也是字典形式的,可以通过下面的方式进行新增:

g1.__dict__["12"]='123'
print(g1.__dict__)

结果:

{'nickname': '草丛伦1', 'aggressive': 58, 'life_value': 455, 'hobby': [], '12': '123'}

实例化的对象 对类的属性引用

对象首先是引用自身的属性,对象的名称空间中只有自己的属性

print(g1.nickname)   #引用自身的属性
print(g1.aggressive)
print(Garen.camp) # 自身没有,引用的是类的属性

类的属性是共享的,多个实例化的对象指向的是同一个变量的地址,是一样的内容,所以说是共享的

print(g1.camp,id(g1.camp))  # 通过id查看内存的地址
print(g2.camp,id(g2.camp))
print(g3.camp,id(g3.camp))

结果是:

Demecia 43096248

Demecia 43096248

Demecia 43096248

对象修改的是在自身的下面添加的,之后查找的时候是从首先从自己的内训寻找的

g1.camp = '1111'
print(g1.camp)
print(g2.camp)
print(g3.camp)

结果:

1111 # 查看的是自己内部的名称空间中的变量

Demecia

Demecia

小练习:对实例化的计数

关键: 每次实例化都会运行__init__,所以在init中写

class Garen:   # 下面是类的属性
camp = 'Demecia'
n = 0 # 定义的Garen类的变量,用于实例化次数的计数
def __init__(self,nickname,aggressive=58,life_value=455):
self.nickname = nickname
self.aggressive = aggressive
self.life_value = life_value Garen.n += 1 # 每次实例化后计数加一,Garen.n
self.hobby = [] def attack(self,enemy):
enemy.life_value -= self.aggressive #  # 实例化
g1 = Garen('草丛伦1') # 实例化
g2 = Garen('草丛伦2')
g3 = Garen('草丛伦3') print(g1.n) # 两种查看的方法
print(Garen.n)

结果:

3

3

绑定方法和函数

print(g1.attack)  # 绑定方法
print(Garen.attack) # 函数

结果:

bound method Garen.attack of <main.Garen object at 0x00000000024546A0>>

**function **Garen.attack at 0x000000000244BBF8>

print(g1.attack(g1))   # 绑定方法使用的时候是把自己g1传递给了self
print(Garen.attack(g1,g1)) # 函数需要传递两个参数

Python面向对象(三)的更多相关文章

  1. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  2. Python面向对象三要素-封装(Encapsulation)

    Python面向对象三要素-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述 将数据和操作组织到类中,即属性和方法 将数据隐藏起来,给 ...

  3. Python面向对象(三)

    一.绑定方法与非绑定方法 一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的 2.绑定给类的方法:为类中定义的函数加上 ...

  4. Python面向对象三要素-多态

    Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...

  5. Python 面向对象三(转载)

    来源:Mr.Seven www.cnblogs.com/wupeiqi/p/4766801.html 四.类的特殊成员 上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段.方法和属性三 ...

  6. python 面向对象三 访问权限 下划线 双下划线

    一.双下划线 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问. ...

  7. python 面向对象(三)类与类之间的关系 初始化方法一些类

    ###################总结################# 面试的时候 让写python一些特殊方法 __init__ 创建对象的时候初始化 __new__对象实例化调用第一个方法 ...

  8. python 面向对象(三)--继承和多态

    在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...

  9. Python 面向对象(三) 魔术方法

    __getitem__ 在对实例或对象使用索引访问时调用,self[key]__dir__ 收集当前模块的信息,包括继承自其它基类(包括object类)的属性和方法 __new 定义如何创建实例__i ...

  10. python面向对象<三>

    类属性.实例属性: class Tool(object): #属性(类属性)类对象(Tool) num = 0 #方法 def __init__(self,new_name): self.name = ...

随机推荐

  1. C# 测试代码#if DEBUG使用

    代码示例: #if DEBUG      Console.WriteLine("DEBUG:11111111111"); #else       Console.WriteLine ...

  2. 安装 Twisted 解决ImportError: No module named zope.interface错误

    转自:http://blog.csdn.net/mickey_miki/article/details/7911323 步骤1:下载Twisted http://twistedmatrix.com/t ...

  3. UE4 Runtime下动态给Actor添加组件

    http://www.v5xy.com/?p=858 UE4的组件分为两种:USceneComponent, UActorComponent UActorComponent (NewObject(th ...

  4. Solr highlight

    hl.preserveMulti 默认是false.Set to true to perform highlighting on all values of a multivalued field a ...

  5. BZOJ2388:旅行规划(travel)——分块凸包

    题目 OIVillage 是一个风景秀美的乡村,为了更好的利用当地的旅游资源,吸引游客,推动经济发展,xkszltl 决定修建了一条铁路将当地 $n$ 个最著名的经典连接起来,让游客可以通过火车从铁路 ...

  6. 总结 Sublime Text 3 无法安装 Package Control 插件的解决办法

    Sublime Text 是一款非常好用的轻便的编辑器,可以安装很多插件,实现IDE的很多功能,着实是程序员的利器. 我安装的 Sublime Text 3 Build 3143 ,软件汉化,软件激活 ...

  7. MyBatis二级缓存配置

    正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 Mybatis二级缓存是SessionFactory,如果两次查询基于同一个SessionFactory,那么就从二级缓存 ...

  8. 微信站 - 实现复制功能 clipboard

    <script src="https://cdn.bootcss.com/clipboard.js/1.5.9/clipboard.js"></script> ...

  9. js异步加载和按需加载

    function loadScript(url,callback){ var script = document.creatElement("script"); script.ty ...

  10. Visiual Studio CLR20r3问题

    原文转自:http://blog.sina.com.cn/s/blog_3f2ef11801013p8c.html(刘帝勇的大观园) 看到有更新,习惯性的点了,升级到Visiual Studio Ul ...