面向对象之成员
时间:2019-10-20
本文章向大家介绍面向对象之成员,主要包括面向对象之成员使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、总概
二、面向对象中类的成员组成
1、字段
包含静态字段(每个对象都有一份)和普通字段(每个对象都不同的数据)
class Person(): company='neusoft'#静态字段 def __init__(self,name,age,gender): self.N=name #普通字段 self.A=age self.G=gender #执行静态字段 print(Person.company)#静态字段由类调用 #访问普通字段 r=Person('tina',18,'female') print(r.A)#普通字段由对象来调用
2、方法
包括静态方法(@staticmethod,无需使用对象封装的内容)、类方法(classmethod)、普通方法(使用对象中的数据)
class Person(): def __init__(self,name,age): self.name=name self.age=age def f1(self):#普通方法 print(1111) @classmethod#类方法 def f2(cls): print(2222) @staticmethod#静态方法 def f3():#静态方法没有默认参数(可以加任何参数) print(2222) #执行普通方法: ret=Person('tina',18) ret.f1() #调用类方法: Person.f2() #调用静态方法: Person.f3()
普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self; 比如:调用obj1.modify() 在调用的时候就相当于把对象赋值给方法:Dbcontrl.modify(obj1) 他的触发者是对象! 类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls; 类方法的触发者是类,当类在触发的时候,把自己当作参数传给cls = class 类方法很少用! 静态方法:由类调用;无默认参数; 其实你在类中使用静态方法:类+静态方法其实就等于一个函数! 触发者是类,常用于一个工具类,在调用的时候不需要实例化!举例来说有个工具类,如果是普通方法每次调用的都需要实例化,如果有非常非常多的人来调用难道每次都需要实例化吗?浪费内存空间,用静态方法那么你在调用的时候就不需要实例化他了!
3、特性
又称属性或普通特性(@property 即将方法伪造成字段)
在python中属性的使用时非常少的,但是在其他语言中属性用的非常多,因为在python中属性是后来才有的,他的功能目前还不是很强大!但是他要告诉人们我也是支持属性的,所以才有了这个属性!
属性是由方法变种而来,如果python中没有属性,方法完全可以代替其功能。
属性存在的意义是:访问属性时可以制造出和访问字段完全相同的假象。
属性的基本使用:
# ############### 定义 ############### class Pager: def __init__(self, current_page): # 用户当前请求的页码(第一页、第二页...) self.current_page = current_page # 每页默认显示10条数据 self.per_items = 10 @property def start(self): val = (self.current_page - 1) * self.per_items return val @property def end(self): val = self.current_page * self.per_items return val # ############### 调用 ############### p = Pager(1) p.start 就是起始值,即:m p.end 就是结束值,即:n
#特性的补充内容: class Foo: def func(self): print('func') @property def pp(self): return 123 @pp.setter def pp(self,value): print(value) @pp.deleter def pp(self): print('del') obj=Foo() print(obj.pp) obj.pp=9999 del obj.pp #特性的另一种使用方式: class Foo(): def f1(self): return 'sdkdlalg' def f2(self,value): print(value) def f3(self): print('lsfjsljsl') ZO=property(fget=f1,fset=f2,fdel=f3,doc='此处是说明') obj=Foo() ret=obj.ZO obj.ZO=122324 del obj.ZO
二、如何快速判断什么时候用类执行,什么时候用对象执行
个人总结:
遇到普通即用对象,其他就用类。(即普通方法、普通字段、普通特性用对象来调用;类方法,静态字段、静态方法则用类来调用执行)
老师总结:
有self的,对象调用;无self,类调用
三、成员修饰符
成员修饰符包括公有&私有
这里主要强调一下
四、类的特殊成员
原文地址:https://www.cnblogs.com/tina-python/p/5555275.html
- (46) 剖析PriorityQueue / 计算机程序的思维逻辑
- (48) 剖析ArrayDeque / 计算机程序的思维逻辑
- 那些年在win下填过的Django坑
- Python爬虫一步步抓取房产信息
- (47) 堆和PriorityQueue的应用 / 计算机程序的思维逻辑
- 一篇文章完全理解virtualenv
- Python运用蒙特卡洛算法模拟植物生长
- (57) 二进制文件和字节流 / 计算机程序的思维逻辑
- 真正的 Tornado 异步非阻塞
- (58) 文本文件和字符流 / 计算机程序的思维逻辑
- Python爬虫—破解JS加密的Cookie
- Python通过抓包和使用cookie爬取微博完全讲解
- (50) 剖析EnumMap / 计算机程序的思维逻辑
- 认识九大经典sql模式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法