Python_面向对象_类2
类的几个装饰器方法:
@classmethod (类方法):使之无法访问实例变量
class Animal(object):
def __init__(self, name):
self.name = name # 实例变量 sleep = '睡觉觉后。。' # 类变量 @classmethod # 加上此装饰器便不能访问实例变量,但是可以访问类变量
def eat(self):
print('%s 动物要吃东西。。' % self.sleep) A = Animal('狗类')
Animal.sleep # 直接访问类变量
Animal.eat() # 调用
A.eat()
classmethod
睡觉觉后。。 动物要吃东西。。
睡觉觉后。。 动物要吃东西。。
result
@staticmethod (静态方法):里面就不能有变量了,(和实例就没有关系了),不能访问类变量和实例变量
静态方法 : 作为一个工具箱,里面访问不了外面,类也访问不到里面的东西,只能通过自己把自己传进去,只是通过类可以找到它
class Animal(object):
def __init__(self, name):
self.name = name # 实例变量 sleep = '睡觉觉后。。' # 类变量 @staticmethod # 静态方法
def drink(): # 此处加入self将没有任何意义
print('%s 动物要喝水水。。') # 不能‘访问’实例变量以及类变量 @staticmethod # 静态方法
def drink1(self):
print('%s 动物要喝水水。。' % self.name) # 可以传入值 A = Animal('狗类')
A.drink()
A.drink1(A) # 值的传入
staticmethod
%s 动物要喝水水。。
狗类 动物要喝水水。。
result
@property (属性):把类中方法变成了一个属性,不能给里面传值,也不能删除里面的值
class Animal(object):
def __init__(self, name):
self.name = name
self.num = None @property # 变成了一个属性
def eat(self):
print('%s 动物要吃饭饭。。' % self.name) @property
def vel(self):
return self.num @vel.setter
def vel(self, num):
self.num = num # 通过.setterf给里面赋值
print('改过的值:', self.num) @vel.deleter # 通过.deleter从里面删除东西
def vel(self):
print('---------')
del self.num # 通过这个才能彻底从里面删除变量
# print(self.num) A = Animal('狗类')
A.eat # 以访问属性的方式,访问eat
print(A.vel)
A.vel = 3
del A.vel # 删除调用
property
狗类 动物要吃饭饭。。
None
改过的值: 3
---------
result
私有属性:__名字:直接调用不行但是可以通过_类名__名字 可以访问
类的部分特殊成员:
1.__doc__:输出类的描述信息
2.__module__:当前操作的对象在那个模块
3.__class__:当前操作的对象的类是什么
4.__init__:构造方法,通过类创建对象时(一实例化后),自动触发执行
5.__del__:析构方法,当对象在内存中被释放时, 自动触发执行,在所有程序都执行完,自动触发执行
6.__call__:实例化后,对象后面加括号,触发执行此方法
7.__dict__:以字典的形式返回类里的成员变量
8.__str__:如果一个类中定义了此方法,那么在打印对象时,默认输出该方法的返回值
9.__iter__:用于迭代器,之所以列表、字典、元组可以进行for循环,,是因为类型内部定义了此方法
10.__new__:构造了类,如果重写了这个方法,就不会自动触发调用__init__方法了
class Animal(object):
'''我是一朵小花花,啦啦啦。。'''
def __init__(self, speak):
self.speak = speak
print('%s yes >_< ' % self.speak)
self.n = 5 def __str__(self):
return '小花花长大大。。'
A = Animal('oh!')
print(A.__doc__) # 类中的描述信息
print(A.__dict__) # 打印类里的实例变量
print(A) # 自动触发的__str__
部分实现
oh! yes >_<
我是一朵小花花,啦啦啦。。
{'speak': 'oh!', 'n': 5}
小花花长大大。。
result
具体参照:http://www.cnblogs.com/wupeiqi/p/4766801.html
Python_面向对象_类2的更多相关文章
- Python_面向对象_类1
面向对象:减少重复代码,提高效率,比函数式编程更高效 类的创建: 实例属性又称:成员变量,成员属性(或者字段) 面向对象的三大特性: 一.封装 把客观事物封装为抽象的类,并对外只暴露一个可用接口 使用 ...
- python中面向对象_类_对象的概念与定义
1. 面向对象的概念,面向对象是一种编程思想. 是对现实世界中一类事物的抽象,在编程中可以理解为是一种建立现实世界事物的模型 2. 面向对象和面向过程的区别: 面向过程关注的是完成工作的步骤. 面向 ...
- java语言基础(四)_面向对象_类_对象_封装_构造
面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备 ...
- Java核心基础第5篇-Java面向对象_类和对象
Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...
- python_面向对象_组合
组合: 一个类的对象是另外一个类对象的属性 # 组合 # 一个类的对象是另一个类对象的属性 # 什么时候使用组合:当两个类之间的关系是 :什么有什么的关系 : 班级有学生 学生有班级 班级有课程 图书 ...
- Python_面向对象_单例模式
class A(object): pass a1 = A() a2 = A() print(a1 == a2)print(id(a1))print(id(a2)) 结果: False 23257231 ...
- 黑马程序员_Java面向对象_内部类
6.面向对象_内部类 1.内部类定义 内部类:将一个类定义在另一个类里面,对里面那个类就称为内部类.(内置类.嵌套类)内部类可以被私有修饰. 2.内部类访问规则 访问特点: 内部类可以直接访问外部类中 ...
- 【转】Python之面向对象与类
[转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...
- OC学习总结之面向对象和类
OC学习总结之面向对象和类 Objective-c是c语言的母集合,它的原意就是在原始的c语言的主体上加入面向对象的特性.1.面向对象和面向过程 面向对象和面向过程是编程的两种思考方式.面向对象 ...
随机推荐
- 解决genymotion-arm-translation.zip无法拖拽安装的问题
1.问题由来 适用情况一:当我们启动了Genymotion模拟器后,在AndroidStudio运行app时,弹出如下错误: INSTALL_FAILED_CPU_ABI_INCOMPATIABLE ...
- C/C++中容易造成内存溢出的函数
1.strcpy() strcpy()函数将源字符串复制到缓冲区.没有指定要复制字符的具体数目.复制字符的数目直接取决于源字符串中的数目.如果源字符串碰巧来自用户输入,且没有专门限制其大小,则有可能会 ...
- ubuntu 精简配置
是这样的情况,在windows 7的vm虚拟机上装了Ubuntu 12.04 Desktop,主要是想用它的gui, 所以把不要的给删了. sudo apt-get -y --auto-remove ...
- Appium新版本不再支持ByName定位了怎么办
appium版本在1.5以后就不再支持ByName的定位,本文章仅介绍在appium1.6.3/1.6.4/1.6.5版本下如何支持ByName定位,适用于安卓.在使用appium1.5之后的版本时, ...
- Truffle框架环境搭建
注意:本教程需要Truffle4.0或者是更高的版本 以太坊的智能合约只是代码,和我们的纸质代码不同,此合同需要非常精确的方式理解 如果合同编码不正确,我们的交易可能会失败,会导致gas的损失,更不用 ...
- Python-计算机硬件基础
预习计算机硬件基础1,CPU/内存.硬盘2,存储器 什么是编程语言什么是编程编程的目的运行程序的三大核心硬件重要:运行程序,硬件的工作过程 ------------------------------ ...
- 用docker快速搭建wordpress博客
WordPress是一个非常著名的PHP编写的博客平台,发展到目前为止已经形成了一个庞大的网站平台系统.在WP上有规模庞大的插件和主题,可以帮助我们快速建立一个博客甚至网站. 在Windows上可 ...
- CM5.15安装kafka
cm主节点执行: [root@dip001 kafka]#ll KAFKA-.jar KAFKA---el7.parcel KAFKA---el7.parcel.sha1 manifest.json ...
- Oracle imp exp 导入导出 执行脚本
一:用命令 imp/exp 的方式进行数据的导入和导出 一:文件后缀名: 二:oracle 导出 exp 命令 echo 开始备份数据库 if not exist D:\oracle_bak\fil ...
- Confluence 6 新 Confluence 安装配置一个数据源连接
如果在你的 Tomcat 中配置了数据源,并且Confluence 设置指南在安装的时候检测到这个配置的时候,配置数据源的选项将会提供给你进行配置.入股你希望使用数据源,请参考下面的配置. 1. 停止 ...