一、属性

对象的属性(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__)

最新文章

  1. Xcode7--免证书真机调试
  2. asp.net 网站 或者web Api 发布
  3. (实用篇)php 文件夹删除,清除缓存程序
  4. php使用memcache与memcached扩展对key值的影响
  5. HDU 4432 Sum of divisors (水题,进制转换)
  6. Objective-C 【在手动内存管理中如何写set方法】
  7. HDU-1598 find the most comfortable road
  8. 使用tmux [FreeBSDChina Wiki]
  9. Eclipse Maven构建Spring MVC项目
  10. poj2140(奇因数的个数)
  11. 时序数据库连载系列:指标届的独角兽Prometheus
  12. Nagios 使用 NSClient++ 监控Windows Server
  13. [C#]WinForm 中 comboBox控件之数据绑定
  14. python字典遍历的几种方法
  15. zope.interface 库学习一
  16. elasticsearch5.6.3插件部署
  17. iframe父页面获取iframe子页面的元素 与 iframe子页面获取父页面元素
  18. ACCESS修改密码,更新显示
  19. java map典型排序
  20. JSP内置对象——response

热门文章

  1. TOF摄像机可以替代Flash激光雷达吗?
  2. CUDA 8混合精度编程
  3. NSight Compute 用户手册(上)
  4. Python_selenium页面元素整合设计经验
  5. JAVA 进行图片中文字识别(准确度高)!!!
  6. java容器学习笔记
  7. 「题解」agc031_c Differ by 1 Bit
  8. 【NX二次开发】Block UI 双精度表
  9. nvm安装管理nodejs
  10. centos7 安装卸载程序rpm使用方法