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.面向对象和面向过程 面向对象和面向过程是编程的两种思考方式.面向对象 ...
随机推荐
- Linux查看所有用户和组信息
主要通过以下两个命令: cat /etc/passwd cat /etc/group 步骤一:cat /etc/passwd查看所有的用户信息,详情如下图: 步骤2:cat /etc/passwd|g ...
- ubuntu安装jdk8
文章连接:https://www.cnblogs.com/lighten/p/6105463.html 1.简单的安装方法 安装JDK的最简单方法应该就是使用apt-get来安装了,但是源一般是Ope ...
- 开通博客的第一天上传我的C#基础笔记。
1.索引器 string arrStr = "sddfdfgfh"; 索引器的目的就是为了方便而已,可以在该类型的对象后面直接写[]访问该对象里面的成员 Console.Wr ...
- 安装elasticsearch 5.x, 6.x 常见问题(坑)的解决
本人在elasticsearch 5.x, 6.x 安装过程中遇到了一些问题: 警告提示 [2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ] una ...
- ES的Query、Filter、Metric、Bucketing使用详解
由于笔者在实际项目仅仅将ES用作索引数据库,并没有深入研究过ES的搜索功能.而且鉴于笔者的搜索引擎知识有限,本文将仅仅介绍ES简单(非全文)的查询API. 笔者原本打算在本文中介绍聚合API的内容,但 ...
- 在XIB 或者 SB 上面 实现 半透明的背景上添加UILabel是文字不透明
设透明背景的时候直接设置RGB值 然后设置Opacity即可
- 【Myeclipse】用Myeclipse10.5搭建C/C++开发环境
一.添加CDT到Myeclipse10.5 我的Myeclipse版本是10.5,刚开始用Myeclipse configuration center添加安装,不管是用远程URL还是用本地Archiv ...
- (五)STL算法
.算法 1.算法通过迭代器来操作容器中的数据: 2.算法为模板函数: 二.迭代器与算法 1.根据移动能力,将迭代器分成了五类 2.使用萃取,输出各个容器中,迭代器的类别 3.其中istream, os ...
- NIO(三)
使用直接缓冲区完成文件的复制(内存映射文件) package com.cppdy.nio; import java.nio.MappedByteBuffer; import java.nio.chan ...
- Json数据交互格式介绍和比较
1.什么是数据交互格式? 就是客户端和服务端进行信息传输的格式(xml和json),双方约定用什么格式进行传输,然后解析得到自己想要的值 xml扩展标记语言,属于重量级(第一占宽带.第二解析难) js ...