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 ...
随机推荐
- 五、SELinux安全防护
rwx 针对用户和组 SELinux 针对程序 targeted:定义网络程序规则 minimum:限制少量软件 mls:限制全部,没定义的全拒绝 [root@proxy ~]# vim ...
- 七、SSL加密网站(待解决)
keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore //创建私钥和证书文件提示输入密 ...
- 并发王者课-铂金2:豁然开朗-“晦涩难懂”的ReadWriteLock竟如此妙不可言
欢迎来到<并发王者课>,本文是该系列文章中的第15篇. 在上篇文章中,我们介绍了Java中锁的基础Lock接口.在本文中,我们将介绍Java中锁的另外一个重要的基本型接口,即ReadWri ...
- 【模拟7.14】B. 熟练剖分(tree) (概率DP)
一道概率神题,考试时没读清题考完看了学长的玄学题解看了好几个小时 首先f[i][j]表示在点 i 为根的子树中,向下最长轻链长度小于等于 j 的概率. 首先递归下去并求出子树大小,然后枚举重儿子,枚举 ...
- Pytest学习笔记3-fixture
前言 个人认为,fixture是pytest最精髓的地方,也是学习pytest必会的知识点. fixture用途 用于执行测试前后的初始化操作,比如打开浏览器.准备测试数据.清除之前的测试数据等等 用 ...
- 《手把手教你》系列基础篇之(三)-java+ selenium自动化测试- 启动三大浏览器(上)(详细教程)
1.简介 前边宏哥已经将环境搭建好了,今天就在Java项目搭建环境中简单地实践一下: 启动三大浏览器.按市场份额来说,全球前三大浏览器是:IE.Firefox.Chrome.因此宏哥这里主要介绍一下如 ...
- .NET Worker Service 部署到 Linux 作为 Systemd Service 运行
上一篇文章我们了解了如何将.NET Worker Service 作为 Windows 服务运行,今天我接着介绍一下如何将 Worker Service 部署到 Linux 上,并作为 Systemd ...
- excel VBA根据一列的逗号隔开值分行
Sub test1() Dim h Dim j As Integer j = 0 Dim n1 As Integer '分行单元格在第几列 Dim m1 As Integ ...
- 重新整理 .net core 实践篇————网关[三十六]
前言 简单整理一下网关. 正文 在介绍网关之前,介绍一下BFF,BFF全称是Backend For Frontend,它负责认证授权,服务聚合,目标是为前端提供服务. 说的通透一点,就是有没有见过这种 ...
- USB上位机通信:CyAPI
至今的工作中,有USB接口通信的需求,记录一下. 建立一个USB设备对象 CCyUSBDevice *USBDevice = new CCyUSBDev(Handle): 打开USB设备 一个USB设 ...