python's eithteenth day for me 面向对象——命名空间
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些明细称为类的属性。
而类有两种属性:静态属性和动态属性:
1,静态属性就是直接在类中定义的变量。
2,动态属性就是定义在类中的方法。
类的属性是共享给所有对象的。
- class Person:
- role = 'person'
- def __init__(self,name):
- self.name = name
- def func(self):
- print(666)
- p1 = Person('顾清秋')
- p2 = Person('懒笨呆')
- print(p1.role) # person
- print(p2.role) # person
- p1.func() #
- p2.func() #
- # 对象 p1 和 p2是都可以调用 role(静态属性) 和 func 方法的 所以类中的属性是共享给所有对象的。
创建一个对象(实例)就会创建一个对象(实例)的名称空间,存放对象(实例)的名字,成为对象(实例)的属性。
对象使用名字:先找自己内存空间中的,再通过类对象指针找到类,再找类的内存空间的。
对象的内存空间里只存储对象的属性,而不存储方法和静态属性。
方法和静态属性都存储在类的内存空间中,为了节省内存,让多个对象去共享类中的资源。
对于静态属性的修改,应该使用 类名.静态属性名直接修改。
- class Person:
- money = 0 # 静态属性
- def __init__(self,name):
- self.name = name
- def work(self):
- print(self.name,'工作,赚了1000块钱')
- Person.money += 1000 # 直接使用 类名.静态属性名
- father = Person('father') # mother 工作,赚了1000块钱
- mother = Person('mother') # father 工作,赚了1000块钱
- mother.work()
- father.work()
- print(Person.money) #
写一个功能,可以统计创建过几个对象:
- class Person:
- count = 0
- def __init__(self):
- Person.count += 1
- p1 = Person()
- p2 = Person()
- p3 = Person()
- print(Person.count) #
- # 创建一个对象(实例)就会执行一次 __init__方法。
# 圆
# 半径为(1,3,5,7,9)
# 计算圆的周长
# 计算圆的面积
- from math import pi # 导入 pi 模板
- class Circle:
- def __init__(self,r):
- self.r = r
- def circle_area(self): # 计算圆面积的函数
- return pi*self.r**2
- def circle_perimeter(self): # 计算圆周长的函数
- return pi*self.r*2
- for i in range(1,10,2):
- c1 = Circle(i) # 创建 c1 对象
- print(c1.circle_area()) # 调用圆面积方法
- print(c1.circle_perimeter()) # 调用圆周长方法
python's eithteenth day for me 面向对象——命名空间的更多相关文章
- python学习笔记-(十)面向对象基础
面向对象相关知识简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...
- python系列十六:Python3 面向对象
#!/usr/bin/python #-*-coding:gbk-*- #Python3 面向对象 '''面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了 ...
- Python黑帽编程2.9 面向对象编程
Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件的.硬件本质上处理的是信号,在此基础上, ...
- Python 第六篇(上):面向对象编程初级篇
面向:过程.函数.对象: 面向过程:根据业务逻辑从上到下写垒代码! 面向过程的编程弊:每次调用的时候都的重写,代码特别长,代码重用性没有,每次增加新功能所有的代码都的修改!那有什么办法解决上面出现的弊 ...
- Python学习系列(八)( 面向对象基础)
Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类 ...
- python中全局global和局部nonlocal命名空间
python中全局global和局部nonlocal命名空间 局部名称空间对全局名称空间的变量可以引用,但是无法改变. count = 1 def func1(): count = 2 print(c ...
- python学习-第四天补充-面向对象
python学习-第四天补充-面向对象 python 私有 --name mangling(名字修改.名字) 在命名时,通过使用两个下划线作为开头,可以使得这个变量或者函数编程私有的,但是这个其实的p ...
- Python匹马行天下之面向对象
概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...
- Python学习(十二) —— 面向对象
一.初识面向对象 面向过程的核心是过程,流水线思维,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点:极大地降低了写程序的复杂度,只需要顺着要执行的 ...
随机推荐
- ultraedit使用记录
ultraedit使用记录 10:57:33 在日常的工作中,我经常用keil进行程序的编写等工作,不过在编写过程中Keil对中文的支持不是很好,容易发生问题:同事推荐我用ultraedit进行程序的 ...
- mysql的bin或者sbin目录可执行文件
一. mysql服务和myql服务启动程序 1. mysqld mysqld就是mysql server,负责管理对mysql数据的访问. 当mysql server启动后,它会监听来自客户端的网络连 ...
- 使用ZooKeeper实现Java跨JVM的分布式锁
一.使用ZooKeeper实现Java跨JVM的分布式锁 二.使用ZooKeeper实现Java跨JVM的分布式锁(优化构思) 三.使用ZooKeeper实现Java跨JVM的分布式锁(读写锁) 说明 ...
- 004——VUE中的v-once的使用
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- jenkins-启动和关闭服务
笔者没有把Jenkins配置到tomcat中,每次都是用命令行来启动Jenkins.但是遇到一个问题:Jenkins一直是开着的,想关闭也关闭不了.百度了一些资料,均不靠谱(必须吐槽一下百度).于是进 ...
- New Concept English three (35)
27 55 The word justice is usually associated with courts of law. We might say that justice has been ...
- 【tensorflow:Google】三、tensorflow入门
[一]计算图模型 节点是计算,边是数据流, a = tf.constant( [1., 2.] )定义的是节点,节点有属性 a.graph 取得默认计算图 g1 = tf.get_default_gr ...
- forEach和map的区别
写法上没什么区别,只是返回值会不一样,map能够返回每一项,而forEach则返回undefined,以后要用哪个你知道了吧?map返回新的数组,可以进行后续更多的操作,例如: let arr = [ ...
- 【PL/SQL编程】SQL与PL/SQL的区别
SQL概念: SQL是结构化查询语言,由数据定义语言.数据操纵语言.数据控制语言构成,它不面向过程,即前一条语句与后一条语句无关.它没有流程控制,也不存在变量. PL SQL概念: PL/SQL ...
- Https与SSL介绍
参考资料: http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html http://www.ruanyifeng.com/blog/2014/09/ill ...