面向对象【day07】:类的属性(五)
本节内容
- 概述
- 公有属性
一、概述
前面我们讲了类的私有属性,现在我们来说说类的公有属性,这边很容易被人弄混淆,有人觉的,在__init__()构造方法中,除了私有属性,其他的都是公有属性了,其实这是一个错误的结论,并不是定义在__init__()初始化方法中的属性是公有属性(除私有属性),那什么是公有属性呢?揭起了大家的好奇心。
定义:指的是所属这个类的所有对象,都可以访问的属性,叫做公有属性。
二、公有属性
2.1 定义
说明:在类中直接定义的,可以提供这个类所属的所有对象都可以访问的属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class dog( object ): "dog class" nationality = "JP" #定义公有属性nationality def __init__( self ,name): self .name = name d1 = dog( "alex" ) d2 = dog( "sanjiang" ) print (d1.nationality,d2.nationality) #所有的成员变量都可以访问 #输出 JP JP |
这边有个小疑问,d1.name,d2.name也可以访问,也可以修改, 为什么不能叫公有属性呢?代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class dog( object ): "dog class" nationality = "JP" def __init__( self ,name): self .name = name d1 = dog( "alex" ) d2 = dog( "sanjiang" ) print (d1.name,d2.name) #输出 alex sanjiang |
很明显,上面的name是每个对象的属性,并不是共享,而是独立的 。
2.2 类访问公有属性
说明:公有属性不仅可以通过所属类的所有对象访问,还可以通过类本身直接访问和修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class dog( object ): "dog class" nationality = "JP" #定义公有属性 def __init__( self ,name): self .name = name d1 = dog( "alex" ) d2 = dog( "sanjiang" ) print (dog.nationality) #访问公有属性 dog.nationality = "US" #修改公有属性 print (dog.nationality) #输出 JP US |
2.3 公有属性特性
说明:公有属性不是私有属性,它提供所有对象访问和修改,那我们其中有一个对象正在修改公共属性发生什么变化呢?或者类本身直接修改了公共属性,又放生什么变化呢?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
class dog( object ): "dog class" nationality = "JP" def __init__( self ,name): self .name = name d1 = dog( "alex" ) d2 = dog( "sanjiang" ) print ( "firsthand change..." ) print (d1.nationality,d2.nationality) print ( "brfore change ..." ) d1.nationality = "CN" #对象的d1修改公共属性得值 print (d1.nationality,d2.nationality) print ( "after change ...." ) dog.nationality = "US" #dog类本省修改公共属性的值 print (d1.nationality,d2.nationality) #输出 firsthand change... JP JP brfore change ... CN JP #d1对象的公共属性被修改了 after change .... CN US #d1对象的公共属性值没有随着类本身的公共属性值修改而修改 |
我去,看的我头昏眼花的。。。好吧,下面我就一张图来说明一下:
对上面的图做一下总结:
- 对象d1去访问nationality属性时,如果在成员属性中找不到,就会找公共属性,也就是说自己的属性找不到就去找父亲的属性
- d1.nationality="CN" 相当于在自己对象内部又重新创建了一个新的局部变量,这个局部变量已经脱离了class本身,跟这个类已经没有半毛钱关系了,只是名字一样而已,如果不改,还是找全局的。
2.4 公有属性和方法的疑惑
从上面我们可以看出公有属性只有一个,而且是在没有定义对象的时候,就已经存在,那么类中的方法是不是每调用一次,就会生成一个呐?答案是肯定不会的。
就是说,你去实例化然后调用sayhi方法,只是拿着这块内存中的数据去调公有的sayhi方法而已,并不是有多个。
面向对象【day07】:类的属性(五)的更多相关文章
- Python 面向对象之一 类与属性
Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...
- <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性
设计类
- java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念
类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...
- python进阶01 面向对象、类、实例、属性封装、实例方法
python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...
- java 面向对象(二十五):内部类:类的第五个成员
内部类:类的第五个成员 1.定义: Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类.2.内部类的分类:成员内部类(静态.非静态 ) vs 局部内部类(方法内.代码块内.构 ...
- python面向对象-2深入类的属性
在交互式环境中输入: >>> class A: a=0 def __init__(self): self.a=10 self.b=100 >>> a=A() > ...
- Python面向对象-day07
写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心 ...
- Python之面向对象与类
本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 子类属性查找顺序 一.面向对象的概念 1. "面向对象(OOP)"是什么? ...
- 【转】Python之面向对象与类
[转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...
- python 面向对象与类的基本知识
一 什么是面向对象,面向对象与类的关系. 面向对象的程序设计是用来解决扩展性. 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象 ...
随机推荐
- python 中的三元表达式及lambda
一.三元表达式 举一个简单的列子,很多地方都有这样的规定,比如用水或者用电,假设用水价格为3R/立方米,当你每个月用超过7立方米后,超出的水按照3.3R/立方米计价.然后写一个程序计算一个家庭每月的水 ...
- PAT 1016 部分A+B
https://pintia.cn/problem-sets/994805260223102976/problems/994805306310115328 正整数A的“D~A~(为1位整数)部分”定义 ...
- U 盘安装 CentOS的方法
1. 刻录U盘 我使用的工具是 UltralISO 2. 打开ISO 3. 使用<启动>-<写入磁盘映像> 根据U盘的性能 可能好事 5min-15min左右 4.找到想要安装 ...
- python使用原始套接字 解析原始ip头数据
使用底层套接字解码底层流量,是这次做的重点工作. 首先来捕获第一个包 # coding:utf-8import socket # 监听的主机IP host = "192.168.1.100& ...
- VMware虚拟机看不到共享目录
1. 确认VMtools已经装好,开启共享文件夹,设置好共享目录 2.执行命令 sudo mount -t vmhgfs .host:/ /mnt/hgfs如果出现错误: Error: cannot ...
- 2018 CCPC网络赛 1010 hdu 6447 ( 树状数组优化dp)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 思路:很容易推得dp转移公式:dp[i][j] = max(dp[i][j-1],dp[i-1][j ...
- Nginx反代至Tomcat基于memcached的session保持
实现功能:基于前面tomcat基础简介与示例文章 (1) tomcat cluster将会话保存至memcached中:实现模型: 这里写图片描述 配置B,C主机安装openjdk与tomcat[本次 ...
- 自学Linux Shell1.2-Linux目录结构
点击返回 自学Linux命令行与Shell脚本之路 1.2-Linux目录结构 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置 ...
- 洛谷 P1120 小木棍 [数据加强版]解题报告
P1120 小木棍 [数据加强版] 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它 ...
- 洛谷 P2466 Sue的小球 解题报告
P2466 [SDOI2008]Sue的小球 题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当 ...