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.面向对象和面向过程 面向对象和面向过程是编程的两种思考方式.面向对象 ...
随机推荐
- C#委托delegate、Action、Func、predicate 对比用法
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 一.委托的声明 (1) delegate delegate我们常用到的一种声明 Delega ...
- <TCP/IP>ICMP报文的分类
Internet控制报文协议,即为ICMP(Internet Control Message Protocal),用于主机,路由器之间传递信息,其目的是让我们能够检测网路的连线状况﹐也能确保连线的准确 ...
- python笔记---需求文件requirements.txt的创建及使用
/******************************************/ 感谢大家一直以来的关注与支持. 本站迁移至 http://qingkang.me 也欢迎大家继续关注. /** ...
- python学习第38天
mysql的存储引擎(innodb,myisam)mysql支持的数据类型约束表的创建\删除\修改\查看表结构表与表之间的关系
- Go代码重构:23倍的性能爆增
几周前,我读了一篇名为“ Good Code vs Go Code中的错误代码 ”的文章,作者指导我们逐步完成实际业务用例的重构. 本文的重点是将“坏代码”转变为“良好代码”:更具惯用性,更易读,利用 ...
- 一篇文章让你了解Android各个版本的历程
2008年--至今 Android 1.5(Cupcake纸杯蛋糕): 智能虚拟键盘:使用widgets实现桌面个性化:在线文件夹(Live Folder)快速浏览在线数据:视频录制和分享:图片上传: ...
- Oracle 行转列pivot 、列转行unpivot 的Sql语句总结
这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from ap ...
- 【JS】中ajax的URL中包含中文,后台接收乱码
[问题]ajax提交get请求,url中参数包含中文,后台接收到显示乱码. [解决方案]前台: function getSiteInfoByName(siteName){ var res; $.aja ...
- Let the Balloon Rise <map>的应用
Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the ...
- Python老男孩
1.可以自己编写模块,但注意:如果想要调用该模块,需要将该模块放到site-packages目录下,或将该模块放在执行程序的路径下. 2.pyc文件是什么? 集合: set 集合可以去重:做交集.并集 ...