二十一. Python基础(21)--Python基础(21)

1 ● 类的命名空间

#对于类的静态属性:

    #类.属性: 调用的就是类中的属性

    #对象.属性: 先从自己的内存空间里找名字, 找到了用自己的, 没找到用类的, 如果类中也没有,就报错

#对于类的动态属性(方法):

    # 这个方法本身就存在类中,并不会存在对象的内存中

    # 如果要通过对象调用类中的方法, 这依赖于 去对象中的一个地址簿去类中寻找对应的方法

#对于对象的属性:

    # 对象的属性就存在对象的命名空间中

    # 只能被对象调用、修改, 不能被类调用(类内调用: self.属性名; 类外调用: 对象.属性)

class A:

    country = '印度'

    def __init__(self, name):

        self.name = name

    def show_name(self):

        print(self.name)

 

A.gender = 'male' # 在类体外定义类属性

A.country = '中国' # 在类体外修改已有的类属性/静态属性的值()

a = A("Arroz")

a.age = 18 # 在类体外定义对象属性

print(A.country)

print(a.gender)

a.show_name()

'''

中国

male

Arroz

'''

for i in A.__dict__.items(): # 打印类属性, 可以看到, 在类体外定义的类属性('gender', 'male')存在于类体中

    print(i, end = "\n")

'''

('__module__', '__main__')

('country', '中国')

('__init__', <function A.__init__ at 0x000000000272A840>)

('show_name', <function A.show_name at 0x000000000272A8C8>)

('__dict__', <attribute '__dict__' of 'A' objects>)

('__weakref__', <attribute '__weakref__' of 'A' objects>)

('__doc__', None)

('gender', 'male')

'''

for i in a.__dict__.items(): # 打印对象属性, 可以看到, 在类体外定义的类属性('age', 18)存在于类体中, 但在类体外定义的对象属性不存在于类体中,

    print(i, end = "\n")

'''

('name', 'Arroz')

('age', 18)

'''

 

 

class A:

    country = '印度'

    def show_name(self):

        print(self.name)

 

a = A() #实例化对象

a.name = 'Alex' # 给对象创建一个name属性

a.show_name() #调用了show_name()方法

'''

Alex

'''

 

class A:

    country = '印度'

    def show_name(self):

        print(self.name)

 

a = A()

a.name = 'Alex'

a.show_name = 'Egon'

a.show_name()

'''

报错:

TypeError: 'str' object is not callable

'''

 

 

class A:

    country = '印度'

    def show_name(self):

        print(self.name)

 

a = A()

b = A()

print(A.country) # 印度

print(a.country) # 印度, 先找a对象的内存, 再找类A的内存

print(b.country) # 印度

a.country = '中国' # 给a对象创建了一个属性

print(A.country) # 印度

print(a.country) # 中国

print(b.country) # 印度

# 如果是在C++中, 如果某一个对象修改了静态属性, 其它对象的静态属性(实际上是同一个静态属性)也将改变

 

2 ● 组合

组合就是在一个类中以另外一个类的对象作为对象属性

组合表达的是 什么有什么(A 有 B) 的一种关系, 例如①圆环的大环和小环的关系, ②教师与课程的关系, ③ 人与生日的关系

作用: 增强了代码的重用性

class Dog():

    role = 'dog'

 

    def __init__(self, name, aggressivity, blood):

        self.name = name

        self.aggr = aggressivity

        self.blood = blood

 

    def bite(self, person):

        print('%s bites %s' % (self.name, person.name))

        person.blood -= self.aggr

 

class Weapon(): # 定义类时, 类体可以是空的, 所以__init__()等属性也不是必须的

    def prick(self, dog):

        dog.blood -= 500

 

class Person:

    role = 'person'

 

    def __init__(self, name, aggressivity = 200):

        self.name = name

        self.aggr = aggressivity

        self.blood = 20000

        self.weapon = Weapon() # 类的组合

 

    def attack(self, dog):

        print('%s attacks %s'%(self.name, dog.name))

        dog.blood -= self.aggr

 

egon = Person('Egon') # 攻击力采用默认的200

alex = Person('Alex', 500) # 重新声明攻击力500

mica = Dog('Mica', 1000, 3000)

# mica咬egon

mica.bite(egon)

print('egon.blood:', egon.blood)

# egon反攻mica,, mica减血200, 剩2800

egon.attack(mica)

print('mica.blood:', mica.blood)

print('##################')

mica.bite(alex)

# mica咬alex

print('alex.blood:', alex.blood)

# alex反攻mica,, mica减血500, 剩2300

alex.attack(mica)

print('mica.blood:', mica.blood)

 

二十一. Python基础(21)--Python基础(21)的更多相关文章

  1. 第一、二章——Python简介与Python基础

    前言:<Data Wrangling with Python>这本书主要是讲使用Pyhon来处理各种类型保存的数据的. 第一章:Python简介 1.版本选择 本书选择的Python版本是 ...

  2. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  3. Python股票分析系列——基础股票数据操作(一).p3

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...

  4. Python运维开发基础05-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...

  5. D10——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D10 20180906内容纲要: 1.协程 (1)yield (2)greenlet (3)gevent (4)gevent实现单线程下socket多并发 2. ...

  6. D06——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D06 20180821内容纲要: 面向对象初级学习 1 面向对象 2 类 (1)封装 (2)继承 (3)多态 3 小结 4 练习:选课系统 5 课外拓展:答题系 ...

  7. D05——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime ...

  8. 【Python笔记】Python语言基础

    Python是一种解释性(没有编译).交互式.面向对象的语言 1.安装python编译器 版本:Python2.7比较普遍,Python不是向下兼容的软件,因此Python3.x有些东西不好找资料 2 ...

  9. 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程

    点击了解更多Python课程>>> 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程 适用人群: 即将毕业的大学生,工资低工作重的白领,渴望崭露头角的职场新人, ...

随机推荐

  1. 2017-2018-1 20155228 《数学建模》 MatlabR2017a安装教程

    2017-2018-1 20155228MatlabR2017a安装教程 原版软件和破解补丁的下载 原版软件和破解补丁的下载链接 需要关注微信公众号才能获取下载密码,照办就是了,为了学习嘛哈哈哈 有三 ...

  2. Windows 服务器自动重启定位

    有个非常好的小技巧,就是在服务器端命令行,执行systeminfo,能查到服务器上一次重启的时间,依照这个时间在Event Log里再找相应的日志就容易多了. 补充:还能查到这台服务器是虚拟机还是实体 ...

  3. java static语句的总结

    static 是静态方法,他的引用不需要对象,可以使用类名直接进行引用,当然也不需要this.      由于不需要对象,所以static方法内无法调用非static的方法或对象   至于为什么mai ...

  4. web服务器集群(多台web服务器)后session如何同步和共享

    在访问量上去以后,很多人会采用web集群的方式在满足逐渐增长的用户量.这时候就不得不面对一个问题,那就是在多个服务器下,每次请求都会因为负载均衡而分配到不同的服务器上.用户在登录服务器后,下一次请求被 ...

  5. ORA-55617解决方法

    昨天一测试环境出现异常ORA-55617: Flashback Archive "XXXXX" runs out of space and tracking on "XX ...

  6. Spring IOC 注入方式详解 附代码

    引言 Spring框架作为优秀的开源框架之一,深受各大Java开发者的追捧,相信对于大家来说并不陌生,Spring之所以这么流行,少不了他的两大核心技术IOC和IOP.我们这里重点讲述Spring框架 ...

  7. 最短路径之Bellman-Ford算法的队列优化及邻接表

    参考链接:https://blog.csdn.net/qq_40626497/article/details/81139344

  8. Bootstrap3基础 text-uppercase/lowercase/capitalize 字母大写、小写和首字母大写

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  9. 使用MyBatis Generator 1.3.7自动生成代码

    MyBatis Generator是一款mybatis自动代码生成工具,可以通过配置后自动生成文件. MyBatis Generator有几种方法可以生成代码,下面是其中一种.  一.官网下载 MyB ...

  10. CF285E Positions in Permutations

    思路 dp+二项式反演的神题 就是dp部分非常麻烦(好吧是我傻了 考虑先钦定m个满足条件的位置,这m个\(x_i\),只能放\(x_i-1\)或\(x_i+1\),然后其他的随便放(得出至少m个的方案 ...