python -- 面向对象编程(属性、方法)
一、属性
对象的属性(attribute)也叫做数据成员(data member)。
如果想指向某个对象的属性,可以使用格式:
object.attribute
属性又分为:私有属性和公有属性。
私有属性是以两个下划线开头(__),私有成员在类的外部不能直接访问。
Python提供了一种特殊方式来访问私有成员:
对象名._类名__私有属性名 (对象名是类实例后的对象)
公有属性既可以在类的内部进行访问,也可以在外部程序中使用。
Python还有一类比较特殊的内置属性,如:__doc__、__module__、__base__。
二、方法
方法是在类中定义的函数。
类的方法和普通的函数只有一个区别:
它们必须有一个额外的放在最前面的参数,通常都是把它命名为self。
但self并不是Python的关键字,如果把它换成其它的标识符也是可以正常执行的。
类的内置方法:开头与结尾都是两个下划线。
__init__(self):类的构造方法,当创建一个类的实例时,会自动调用该方法。
__del__(self):类的析构方法,销毁对象时,会自动执行。
__str__(self):用来设置对象以字符串类型出现时如何显示。
# ---------------------------
# 属性和方法
# ---------------------------
# 定义类
class ProjectGroup:
"""这是一个项目组的类"""
group_number = 0 # 类的属性(类变量)
# 类的构造方法,创建实例时会被调用
def __init__(self, project_name=None, members=None, dev_time=None):
self.project_name = project_name # 对象的属性(实例变量)
self.members = members # 公有属性,在类的外部可以通过对象进行访问 -- 项目成员
self.__dev_time = dev_time # 私有属性,在类的外部不能直接访问 -- 项目周期
ProjectGroup.group_number += 1
# 析构方法,删除类对象(使用del语句删除类实例)时自动执行
def __del__(self):
ProjectGroup.group_number -= 1
print("Destroy!")
def __str__(self): # 内置函数,用来设置对象以字符串类型出现时如何显示
return self.project_name
def print_members(self):
print(self.members)
def get_dev_time(self):
return self.__dev_time # 通过公有成员方法访问私有成员变量
def set_dev_time(self, dev_time):
self.__dev_time = dev_time
def __mod_budget(self, budget): # 私有方法,只能在类内访问
self.budget = budget
print("设置项目预算:", self.budget)
def set_budget(self, budget):
self.__mod_budget(budget) # 调用私有方法
@classmethod # 修饰器,声明类方法
def class_get_number(cls): # 类方法,不能访问实例变量
print("class method:", cls.group_number) # cls表示该类自身,在外部调用时不需要传值
@staticmethod # 修饰器,声明静态方法
def static_get_number(): # 静态方法
print("static method:", ProjectGroup.group_number) # 同样不能访问实例变量
# print("static method方法:", ProjectGroup.project_name) #打印出错,不能访问实例变量(类方法成员的变量)
# 实例化生成一个对象
project_group1 = ProjectGroup("RFID项目组")
# 在类的外部,访问对象的公有属性
project_group1.members = ['周小军', '张文静', '陈涛', '孙翔']
# 访问类的属性(通过类名或对象名访问)
print("当前项目组的数量:", ProjectGroup.group_number)
print("使用对象访问时的数量:",project_group1.group_number)
print("当前项目组的名称:",project_group1)
# 通过公有成员方法设置私有成员变量的值
project_group1.set_dev_time(90)
print("项目的开发周期为:{}天".format(project_group1._ProjectGroup__dev_time))
# 通过公有方法调用私有方法,设置项目预算为20万
project_group1.set_budget(200000)
# 通过类名/对象调用类方法
ProjectGroup.class_get_number()
# 通过对象/类名调用静态方法
project_group1.static_get_number()
# 再实例化一个对象
project_group2 = ProjectGroup("数据交换项目组", ['刘晓', '卢茜', '耿超'], 120)
print("group_number2数量:", ProjectGroup.group_number)
# 删除对象,自动执行析构方法
project_group3 = ProjectGroup()
print("group_number:", ProjectGroup.group_number)
project_group4 = ProjectGroup() #每创建一个实例化的对象,group_number都会加1
print("group_number数量:", ProjectGroup.group_number)
del project_group3
print("group_number:", ProjectGroup.group_number)
# 类的内置属性
# 返回该类的文档字符串
print("ProjectGroup.__doc__:", ProjectGroup.__doc__)
# 返回创建此对象所用的类名称
print(project_group1.__class__)
print(project_group2.__class__)
# 以字典的形式返回对象的属性和属性值(不包括类的属性)
print(project_group1.__dict__)
print(project_group2.__dict__)
# 返回包含此类的模块名称
print(ProjectGroup.__module__)
# 返回该类的所有父类名称(只返回上一级父类)也叫基类
print(ProjectGroup.__bases__)
# 返回当前模块的名字
print("当前模块的名字:", __name__)
python -- 面向对象编程(属性、方法)的更多相关文章
- Python - 面向对象编程 - MRO 方法搜索顺序
为什么会讲 MRO? 在讲多继承的时候:https://www.cnblogs.com/poloyy/p/15224912.html 有讲到, 当继承的多个父类拥有同名属性.方法,子类对象调用该属性. ...
- Python - 面向对象编程 - 魔术方法(双下划线方法)
什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.c ...
- Python - 面向对象编程 - 子类方法的重写
继承的详解 https://www.cnblogs.com/poloyy/p/15216652.html 方法的重写 在子类继承父类时,子类会拥有父类的所有属性和方法 但当父类的方法实现不满足子类需要 ...
- python面向对象基础-属性/方法
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- python 面向对象编程(一)
一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...
- Python面向对象编程指南
Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...
- python面向对象编程进阶
python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...
- Python面向对象编程(下)
本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...
随机推荐
- GPU—加速数据科学工作流程
GPU-加速数据科学工作流程 GPU-ACCELERATE YOUR DATA SCIENCE WORKFLOWS 传统上,数据科学工作流程是缓慢而繁琐的,依赖于cpu来加载.过滤和操作数据,训练和部 ...
- VB 老旧版本维护系列---尴尬的webapi访问返回json对象
尴尬的webapi访问返回json对象 首先Imports Newtonsoft.Json Imports MSXML2(Interop.MSXML2.dll) Dim URLEncode As Sy ...
- 用java实现一个ATM机系统(2.0版)
用java实现一个ATM机系统(2.0版) java实现银行ATM自助取款机,实现功能:用户登录.余额查询.存钱.取钱.转账.修改密码.退出系统. 文章目录 用java实现一个ATM机系统(2.0版) ...
- 【VBA】最大行,最大列
最大行: Range("B" & Cells.Rows.Count).End(xlUp).Row 最大列 colu = Range("XFD2").En ...
- 【模拟8.09】建设城市(city) (容斥)
放在了考试T1 发现70分的DP很水啊,f[i][j]为当前位置是i分配了j个队的方案 我们用前缀和统计,在将i删去,j倒序枚举,就可以删掉一维(也可以滚动数组滚起来) 1 #include<i ...
- 单臂路由&链路捆绑
单臂路由&链路捆绑 目录 一.单臂路由 1.1.单臂路由作用 1.2.单臂路由实现不同VLAN间通信的原理 二.单臂路由相关命令配置 三.链路捆绑 3.1.以太网链路聚合原理 3.2.命令配置 ...
- Terraform状态State管理,让变更有记录
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...
- 11、ssh自动化脚本编写
11.1.如何一键自动化安装50台规模集群网站搭建: 1.自动化思路: kickstart无人值守安装linux系统(自动创建用户.密码.优化): 分发机上创建秘钥对.批量发走公钥(expect): ...
- iOS工程师如何恍然大悟?
聊聊行情?为什么总有人在乎旁人的看法而忽略自己的初衷? 虽然iOS开发市场说不上好但也绝不算坏,想没想过那些煽风点火说iOS不行的人在做什么? 真的转行从头开始? 错.大错特错! 在劝退你的同时他们会 ...
- 企业管理CRM不只是客户录入系统
企业在举办营销活动或者展会之后,将会收集到大量的客户信息,将这些信息有效地整理.完善.储存也是一个不小的工程.如果您的企业经常面遇到这样的情况,不妨使用Zoho CRM系统来帮您完成.但是,Zoho ...