面向对象相关知识及常用操作(二)

本篇将详细介绍Python 类的成员、成员修饰符、类的特殊成员。

类的成员分为字段、方法和属性

字段:分为普通字段和静态字段,普通字段在每个对象的内存中均保存一份,静态字段仅在类的内存中保存一份

方法:分为普通方法、类方法和静态方法,

  • 普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self
  • 类方法:由调用; 至少一个cls参数;执行类方法时,自动将调用该方法的复制给cls
  • 静态方法:由调用;无默认参数;

字段和方法常见使用见下面例子:

 1 #类的成员分为字段、方法和属性
 2 #字段,分为普通字段和静态字段,普通字段属于对象,静态字段属于类
 3 #方法:分为普通方法、静态方法和类方法
 4 #普通方法:由对象调用,至少有一个self参数,执行普通方法时,自动将该方法调用的对象赋值给self
 5 #类方法:由类调用,至少又一个cls参数,执行类方法时,自动将调用该方法的类复制给cls
 6 #静态方法:由类调用,无默认参数
 7 class FOO:
 8     func="我是静态字段"
 9     def __init__(self,name):
10         self.name=name   #普通字段
11
12     def ord_fun(self):
13         print("普通方法,至少有一个self字段",self.name)
14     @classmethod
15     def class_fun(cls):
16         print("类方法,至少有一个cls参数")
17     @staticmethod
18     def static_fun():
19         print("静态方法,无参数")
20
21     @property
22     def prop(self):
23         print("属性调用")
24
25 #普通字段的调用:
26 f=FOO("Eric")
27 print(f.name)
28 #静态字段的调用
29 print(FOO.func)
30
31 #普通方法的调用
32 f.ord_fun()
33 #类方法的调用
34 FOO.class_fun()
35 #静态方法的调用
36 FOO.static_fun()
37 #属性调用,与普通方法的调用一致,定义时仅有一个self参数,调用时无需括号
38 #访问属性时可以制造出和访问字段完全一致的假象
39 #属性由方法变种而来,若没有属性,方法完全可以替代
40 f.prop

属性

1、属性的基本使用

  • 定义时,在普通方法的基础上添加 @property 装饰器;
  • 定义时,属性仅有一个self参数
  • 调用时,无需括号
  • 方法:foo_obj.func()
  • 属性:foo_obj.prop
  • python属性的功能:属性内部进行一系列的逻辑运算,最终将计算结果返回
 1 class Pager(object):
 2     def __init__(self,current_page):
 3         #用户当前请求的页码
 4         self.current_page=current_page
 5         #每页默认显示的条数
 6         self.per_items=10
 7
 8     @property
 9     def start(self):
10         val=(self.current_page-1)*self.per_items+1
11         return val
12     @property
13     def end(self):
14         val=self.current_page*self.per_items
15         return val
16 #
17 p=Pager(2)
18 print("第二页开始:",p.start)
19 print("第二页结束:",p.end)

2、属性的两种定义方法:

  1、装饰器,即在方法上使用装饰器

  2、静态字段,即在类中定义值为property的字段

装饰器:经典类:如上述例子所示,定义属性的方法  @property

    新式类:新式类的属性比经典类的属性丰富

 1 #新式类,具有三种@property装饰器
 2 class Goods(object):
 3     def __init__(self,name):
 4         self.name=name
 5         #原价
 6         self.original_price=100
 7         #折扣价
 8         self.discount=0.8
 9
10     @property
11     def price(self):
12         #实际价格
13         new_price=self.original_price*self.discount
14         return new_price
15
16     @price.setter
17     def price(self,value):
18         #修改商品原价
19         self.original_price=value
20
21     @price.deleter
22     def price(self):
23         #删除商品原价
24         del self.original_price
25
26 obj=Goods("apple")
27 print(obj.price)
28 obj.price=200
29 print(obj.price)
30 del obj.price

静态字段方式:使用静态字段创建属性时,经典类和新式类无区别

静态字段方式创建属性具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除

 1 class Goods(object):
 2
 3     def __init__(self):
 4         # 原价
 5         self.original_price = 100
 6         # 折扣
 7         self.discount = 0.8
 8
 9     def get_price(self):
10         # 实际价格 = 原价 * 折扣
11         new_price = self.original_price * self.discount
12         return new_price
13
14     def set_price(self, value):
15         self.original_price = value
16
17     def del_price(self, value):
18         del self.original_price
19
20     PRICE = property(get_price, set_price, del_price, ‘价格属性描述...‘)
21
22 obj = Goods()
23 obj.PRICE         # 获取商品价格
24 obj.PRICE = 200   # 修改商品原价
25 del obj.PRICE     # 删除商品原价

二、类成员的修饰符

类成员分为:公有成员:在任何地方都能方位

私有成员:只有在类的内部才能访问,私有成员命名时前两个字符是下划线 __name,特殊成员除外(__init__)

 1 #公有成员:在任何地方都能访问。静态:类的对象可以访问,类内部可以访问,派生类可以访问
 2 #私有成员:只有在类的内部才能访问,仅在类内部可以访问
 3 class C(object):
 4     name="公有静态字段"
 5     __na="私有静态字段"
 6     def __init__(self):
 7         self.foo="公有普通字段"
 8         self.__fox="私有普通字段"
 9
10     def func(self):     #类内部访问
11         print(self.foo)
12         print(self.__fox)
13         print(C.name)
14         print(C.__na)
15 class D(C):     #只能访问公有静态字段和公有普通字段
16     def show(self):
17         print(C.name)
18         # print(C.__na)   无法正常访问
19         print(self.foo)
20         # print(self.__fox)    无法正常访问私有字段
21 print("类访问:",C.name)    #类访问
22 # print("类访问私有字段:",C.__na)   #报错,无法访问
23 obj2=C()
24 obj2.func()   #全部可以正常访问,打印四个
25
26
27 obj_d=D()
28 obj_d.show()

类的特殊成员在实际使用中知道即可,故不一一列举

时间: 2024-11-02 23:26:48

面向对象相关知识及常用操作(二)的相关文章

Linux系统的相关知识、常用命令及拓展、centos 7网卡配置

一.Linux系统的相关知识 1.Linux中根目录下所有文件夹的含义和用途 目录 功能 /bin 存放可执行文件 /dev 存放设备文件 (如:网卡.CPU) /media 存放可移除设备文件 (如:U盘.CD/DVD.VMTools) /opt 存放第三方软件的默认位置 /tmp  存放临时文件 (如:日志文件) /root root用户的家目录,主文件夹 /home 普通用户的家目录,文件夹的命名是以用户的名字来命名的 /etc 存放配置文件 /usr 存放操作系统软件资源 /var 存放

Linux系统的相关知识、常用命令及centos 7网卡配置

(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦) 一.Linux系统的相关知识 1.Linux中根目录下所有文件夹的含义和用途(括号内为举例存放的文件) /  根目录 cd /  切换到根目录 / bin  存放可执行文件 /dev  存放设备文件  (网卡 CPU) /media  存放可移除设备文件   (U盘 CD/DVD  VMTools) /opt  存放第三方软件的默认位置 /tmp  存放临时文件  (日志文件) /root  root用户的家目录,主

python 列表常用操作(二)

1.tuple 的 unpack a,b = t 2.格式化输出 print('您的输入:{},值为{}',format(a,b)) 3.日期计算 import datetime as dt import time as tm print ("time={}",tm.time()) 4.pyhon 面向对象 5.map 函数 对应位置进行操作 6.map 和 lambda 表达式配合起来使用 l1=[1,3,5,7,9] l2=[0,2,4,6,8] result = map(lamb

yum知识和常用操作(不断补充中。。。)

1.RHEL和centos在yum源上可以通用. 2.yum的命令操作 yum repolist        //检查本地yum源文件配置是否正确,yum源是否可以连接正常. yum clean all       //清除本地缓存 yum makecache       //把yum源上信息缓存到本地来,加速搜素速度. yum会搜素/etc/yum.repos.d/目录中的所有文件内容.并进行测试.测试的开关就是enable是否设置为了1. yum源有很多,可以配置本地的,也可以配置Inte

面向对象相关知识总结

//1.hasOwnPrototype 判断是都是当前对象的自有属性 var obj ={name:"zhangsan"}; console.log(obj.hasOwnProperty("name"));//true //2.isPrototypeOf 判断是否是传入对象的原型对象 functionFun(){} var fun=newFun(); console.log(Fun.prototype.isPrototypeOf(fun));//true //con

javascript的常用操作(二)

Undefined 不是 Null 在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法. 对象只有被定义才有可能为 null,否则为 undefined. 如果我们想测试对象是否存在,在对象还没定义时将会抛出一个错误. 错误的使用方式: if (myObj !== null && typeof myObj !== "undefined") 正确的方式是我们需要先使用 typeof 来检测对象是否已定义: if (typeof

知识回顾、进程的相关知识和操作

1.编程语言的发展: 机器语言:二进制 汇编语言:指令,命令形式的 高级语言:面向过程(C)面向对象(python,c++,java) 2.操作系统的目标: 为了使用户更方便的使用系统 3.计算机的组成: cpu,主板,存储,输入,输出 4.并行.并发 并发:指两件或多件事情,在同一时间间隔内同时执行(宏观上是并行,微观上是串行) 并行:指两件或多件事情,在同一时间间隔内同时执行 5.进程有三部分组成: 代码段,数据段,PCB(进程控制块) 6.进程的三种基本状态: 就绪状态:除了cpu之外,进

svn常规操作与相关知识

Svn常规操作与相关知识 一.何谓版本控制 它是一种软件工程籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新,它透过文档控制记录程序各个模块的改动,并为每次改动编上序号,并且编辑错误之后还可以回溯到以前的版本 二.可供我们选择的版本控制系统 1.VCS  (本地版本控制) 2.VSS.CVS(集中版本控制) 3.ClearCase.SVN.Perforce.TFS(集中版本控制) 4.Mercurial(水银/水星).Git(分布式版本控制) 差异: 1.Git和其他版本控制系统的主要

Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4节 透视表和交叉表 第5节 时间序列 第6节 日期的规范.频率以及移动 第7节 时区处理 第8节 时期及算术运算 第9节 重采样及频率转换 第10节 时间序列绘图 groupby 技术 一.实验简介 Python 数据分析(二)需要同学们先行学完 Python 数据分析(一)的课程. 对数据集进行分