二十一. 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. Bamboo基础概念

    1.project     1)提供报告.展板.连接   |——2.plan       1)指定默认代码仓库(同一个仓库)       2)构建触发条件的配置       3)构建结果的发送与通知 ...

  2. IP通信基础学习第三周(上)

    TCP的连接情况有:同时打开,同时关闭,拒绝连接,异常终止连接. TCP流量控制的折中方法是滑动窗口协议,且TCP标准强烈不赞成发送窗口沿向后缩回. 在滑动窗口中,当A发送了11个字节的数据时,P3- ...

  3. 《CSS世界》读书笔记(二)

    <!-- <CSS世界> 张鑫旭著  --> 块级元素:水平流上只能单独显示一个元素 <li>元素默认的display值是list-item,是块级元素 块级盒子( ...

  4. 使用redis做分布式锁

    1.使用setnx命令.先看下官方文档http://redis.cn/commands/setnx.html 2.使用getset命令.先获取,再set 实现案例: * create 2018-12- ...

  5. shell批量修改mysql用户密码

    需求 现在有这么一个需求, 需要大批量修改用户的密码, 需要注意的规则是: 必须添加的字符: *$#sjdKw% 用户名的第一位+*$#sjdKw%+用户名的最后一位,比如用户名chenglee,密码 ...

  6. 整型 布尔值 字符串 for循环

    1.整型 2.布尔值 3.字符串 4.for循环 1.整型:.python中有长整型, Python3中只有整型 2.布尔值: bool:Ture 真       False 假 数字和布尔值可进行转 ...

  7. 单元测试系列之三:JUnit单元测试规范

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...

  8. 自动化测试系列:如何实现Selenium自动化读取H5手机缓存

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6890675.html 前言: 由于Se ...

  9. [CodeForces 372A] Counting Kangaroos is Fun

    题目链接:http://codeforces.com/problemset/problem/372/A 二分思想 AC代码: #include <cstdio> #include < ...

  10. python基础知识点三

    内置函数和匿名函数 python 一共有68个内置的函数:它们就是python提供给你直接可以拿来使用的所有函数 内置函数的图:链接 :https://www.processon.com/mindma ...