python摸爬滚打之day16----类的成员
1、变量(字段)
实例变量(普通字段): 实例变量封装在对象中, 用的时候直接用对象来调用.
类变量(静态字段): 类变量封装在类中的, 同一个类不同对象都可以用, 用的时候直接用类名调用(对象也能调用, 但是不推荐用).
class Person:
country = "China" # 类变量,也叫静态字段,用类或对象来访问 def __init__(self,name,age,gender,passwd):
self.nm = name # 实例变量,也叫普通字段,用对象访问
self.ag = age
self.gd = gender
self.pwd = passwd p1 = Person("小马",45,"男",123123)
p1.country = "China-inner" # 给p1新增一个country实例变量
Person.country = "China-1" # 改变类变量
print(p1.country) # China-inner 优先找p1封存的country, 没有则找类的country
p2 = Person("老王",40,"女",123456)
print(p2.country) # China-1
字段
2、方法
实例方法: 只能由对象来访问的方法, 也是用的最多的方法. 当对象中需要封装某些值时用实例方法.
静态方法: 有装饰器(@staticmethod) 装饰的方法. 推荐用类直接调用.
类方法: 有装饰器(@classmethod) 装饰的方法. 推荐用类直接调用. 类方法的第一个参数默认是cls, 无论用类调用还是用对象调用, cls 指的都是类本身.
当不需要通过对象来保存某些值就可以直接调用静态方法或类方法执行操作.
class Person:
def func1(self): # 实例方法, 也叫普通方法
print("%s,性别%s,今年%s岁" %(self.nm,self.gd,self.ag)) @classmethod
def func2(cls): # 不论是对象调用还是类调用, cls传递的永远都是Person这个类
print("这是一个类方法") @staticmethod
def func3():
print("这是一个静态方法") p1.func1() # 调用实例方法
Person.func2() # 调用类方法
Person.func3()
方法
3、属性
其实就是通过方法改造过来的一种字段, 只在方法前加装饰器@property, 就可以像调字段一样去调用这个方法.
注意: 1,方法参数只能有一个,即self本身; 2,只能通过对象调用, 不能用类调用; 3,调用时候不用写(), 直接当成属性来调用就好了; 3,只能取值不能设置值.
class Info:
def __init__(self,name,gender,qq,birthday):
self.nm = name
self.gd = gender
self.qq = qq
self.bd = birthday
@property
def age(self): # 把age()这个方法变成一个封装在self里的属性(实例变量),调用直接用self.age, 不用加().
age = 2018 - self.bd
return age
p = Info("李大嘴","男","12653656@qq.com",1990)
print(p.age) # 调用时候不用加()
属性
4、私有成员
私有字段: 在字段前加"__"的字段.
私有方法: 在方法前加"__"的方法.
任何私有成员都是直接访问不到的, 只能通过非私有方法来return这个私有成员. 子类也是继承不到的.
class Info:
__passwd_outer = 147258 def __init__(self,name,passwd):
self.name = name
self.__passwd = passwd def show(self):
return self.__passwd , Info.__passwd_outer s = Info("大壮",123456)
print(s.name)
print(s.show()) # 私有字段只能通过非私有方法(show方法)来返回.
print(Info.__passwd_outer) # 错误示范, 静态私有字段也拿不到.
私有字段
class Info:
def __init__(self,name,passwd):
self.name = name
self.__passwd = passwd
def __show(self):
return "私有方法__show"
def show(self):
return self.__show()
s = Info("王大锤",123123)
# print(s.__show()) # 错误示范, 拿不到私有方法的返回值
print(s.show()) # 通过非私有方法(show)来获取
私有方法
python摸爬滚打之day16----类的成员的更多相关文章
- python基础学习笔记——类的成员
一. 细分类的组成成员 之前咱们讲过类大致分两块区域,如下图所示: 每个区域详细划分又可以分为: class A: company_name = '老男孩教育' # 静态变量(静态字段) __ipho ...
- Python学习 :面向对象 -- 类的成员
类的成员 一.字段 - 字段可以分为'普通字段'和'静态字段'两种 - 普通字段(保存在对象中,执行时只能通过对象来进行访问) - 静态字段(保存在类中,在内存中只保存一份数据(可以有效地节约内存的空 ...
- Python基础(十二) 类私有成员和保护成员
python中的protected和private python中用 _var :变量名前一个下划线来定义,此变量为保护成员protected,只有类及其子类可以访问.此变量不能通过from XXX ...
- Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
- python 面向对象(类的成员,属性,绑定和非绑定,)
面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...
- python面向对象(类的成员及类方法)
类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法 类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...
- Python入门-类的成员
昨天我们简单的认识了一下面向对象,以及和面向过程之间的区别,从而我们知道了类这个东西,今天我们就来详细的了解一下关于类的一些东西. 一.类的成员 首先, 什么是类的成员,很简单, 你能在类中写什么? ...
- day16 类之间的关系 特殊成员
类与类之间的关系1.依赖关系(一个对象当另一个对象的参数) 关系最浅, 特殊成员: 1. 类名() 会自动调用 __init__() class Foo: def__init__(self, nam ...
- python中的类的成员变量以及property函数
1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...
- Python面向对象 | 类的成员
一. 细分类的组成成员 之前咱们讲过类大致分两块区域,静态字段部分和方法部分. 每个区域详细划分又可以分为: class A: company = '阿里巴巴' # 静态变量(静态字段) __tel ...
随机推荐
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- oracle 函数 输入值,查询数据,返回相应处理结果
create or replace function FUN_SEARCH_ORDERBY ( INSTACEID in varchar2,TYE IN varchar2) return varcha ...
- 恶心github 下载慢
起因 某天看github上面的代码,有点不耐烦,想下载下来再看,但是现在速度慢的可怜 解决思路 相关网站 获取域名相关ip ipaddress.com 这个有好处就是知道网站部署在哪里,如果有vpn的 ...
- SQL Server 2016新特性:列存储索引新特性
SQL Server 2016新特性:列存储索引新特性 行存储表可以有一个可更新的列存储索引,之前非聚集的列存储索引是只读的. 非聚集的列存储索引支持筛选条件. 在内存优化表中可以有一个列存储索引,可 ...
- 性能测试工具--SIEGE安装及使用简介 siege压力测试
官方网站http://www.joedog.org/ 概述 Siege是一个多线程http负载测试和基准测试工具.它有3种操作模式: 1) Regression (when invoked by bo ...
- React Router教程
React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-router-dom 应用于浏览 ...
- session多服务器共享的方案梳理
session的存储了解以前是怎么做的,搞清楚了来龙去脉,才会明白进行共享背后的思想和出发点.我喜欢按照这样的方式来问(或者去搞清楚):为什么要session要进行共享,不共享会什么问题呢? php中 ...
- MVC教程四:Controller向View传值的几种方式
一.通过ViewData传值 MVC从开始版本就一直支持使用ViewData将Controller里面的数据传递到View.ViewData定义如下: 从上面的截图中可以看出,ViewData里面存的 ...
- C++ 非常量引用无效
/* 非常量引用无效 */ #include <iostream> using namespace std; /* C++标准的规定:非常量的引用不能指向临时对象: 为了防止给常量或临时变 ...
- AT&T汇编指令
GAS中每个操作都是有一个字符的后缀,表明操作数的大小. C声明 GAS后缀 大小(字节) char b 1 short w 2 (unsigned) int / long / char* l 4 f ...