Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法
一、Python面向对象中的新旧式类
1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object)。在python3.x中若没有指定父类,会默认使用的是object作为基类;在python2.x中,若没指定父类,则不会以object作为基类。
2)旧式类(经典类):在定义类时,类后边括号中不用继承object类,甚至不用括号。
3)dir方法是用来查看类的内置方法。
二、私有方法和属性
1)私有属性是对象不希望公开的属性;私有方法是对象不希望公开的方法。在定义私有属性和方法时,在属性或方法名之前添加 __(两个下划线)
#定义一个man类
class Man(object):
def __init__(self,name,age):
self.name = name
self.__age = age # 定义一个私有属性age
def __secret(self):
print "%s的年龄是:%s" %(self.name,self.__age)
def test(self): # 公有类可以调用私有属性和私有方法
self.__secret()
demo = Man('demo',18)
# 不能访问私有属性
# print demo.age
# 也不能访问私有方法
# demo.secret()
demo.test()
2)继承中私有属性和私有方法问题:子类不可以继承父类的私有属性和私有方法
class A(object):
def __init__self(self,name):
self.__age = 18 # 定义一个私有属性和公有属性
self.name = name
def __secret(self):
print "%s的年龄是%s" %(self.name,self.__age)
class B(A):
def test(self):
print self.name
# 不能访问父类私有属性和方法
# print self.__age
# self.__secret()
demo = A('demo')
# 在外界也不可以访问父类的私有属性和方法
demo.test
三、类属性和类方法
1)类对象:类是一个特殊的对象,也叫类对象。故类对象也有自己对应的属性和方法,叫做类属性和类方法。
2)类属性:就是给类对象定义的属性;通常用来记录与类相关的特征;不会记录具体对象的特征。在class关键字的下方定义。
3)类方法:针对类对象定义的方法;在类方法内部只可以调用类属性或类方法。定义格式为:@classmethod def 类名(): pass
class Toy(object):
count = 0 # 使用赋值语句定义类属性
def __init__(self,name):
self.name = name
Toy.count += 1 # 每次创建对象,计数器加1
@classmethod # 定义类方法的标识
def show_toy_count(cls):
print "玩具对象的数量为%d" %cls.count
# 创建玩具对象
toy1 = Toy('乐高')
toy2 = Toy('玩具车')
Toy.count # 调用类属性
Toy.show_toy_count() # 调用类方法
四、静态方法
1)静态方法:在开发的时候,如果需要在类中封装一个方法;这个方法不需要访问实例属性或者实例方法,也不需要访问类属性或类方法;此时我们可以把这个方法封装为静态方法。定义格式为:@staticmethod def 类名(): pass
class Cat(object):
# 不能访问实例属性/类属性
# 静态方法不需要传递第一个参数self
def call():
print "喵喵喵~~~"
# 通过 '类名.静态方法' 来调用;(不需要创建对象就可以直接调用静态方法)
Cat.call()
五、类对象、类属性、静态方法的综合实例
1)需求:设计一个game类
定义一个属性player_name记录当前游戏玩家的玩家姓名(实例属性)
方法:
show_help显示游戏帮助信息(静态方法,自己的参数)
show_top_socre显示历史最高分(类方法,参数为cls)
start_game开始当前玩家的游戏(实例方法,参数为self)
import random
class Game(object):
top_score = 0 # 定义一个类属性,计算最高成绩
def __init__(self, name):
self.play_name = name
Game.top_score = 0 # 初始化为0
@staticmethod
def show_help(): # 定义静态函数
print "游戏帮助"
print "随机生成1-10的数字。猜三次!第一次猜对10分;第二次猜对5分,第三次猜对3分;猜不对0分!猜完之后,会记录你的最高成绩!"
def start_game(self): # 定义实例方法
num = random.randint(1, 10)
score = 0
for i in range(3):
guest = int(raw_input("请输入猜测的数字:"))
if guest == num:
if i == 0:
score += 10
break
elif i == 1:
score += 5
break
else:
score += 3
break
else:
score = 0
print "小明的成绩为%d" % score
if score > Game.top_score:
Game.top_score = score
@classmethod
def show_top_socre(cls): # 创建一个类方法,显示游戏的最高成绩
print "显示最高成绩:%s" % cls.top_score
# 查看游戏帮助
Game.show_help()
xming = Game('小明')
# 开始玩游戏
xming.start_game()
# 查看历史最高分
Game.show_top_socre()
实例总结:
1、实例方法:方法内部需要访问实例属性。
2、类方法:方法内部‘只’访问类属性
3、静态方法:方法内部,不需要访问实例属性和类属性
4、在方法内部,既需要访问实例属性,有需要访问类属性,则可以定义为实例方法
Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法的更多相关文章
- Python面向对象高级编程:@property--把方法变为属性
为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数: >>> ...
- Python - 查看类的方法和属性,dir(),help()
1. dir()查看类的方法和属性 查看slice类的方法和属性 dir(slice) 2.help() 查看某个方法的文档 查看slice类中的indices方法 help(slice.indice ...
- C#中的类、方法和属性
这节讲C#中的类,方法,属性.这是编码中我们最直接打交道的三个结构. 类: 类(class)是面向对象中最基本的单元,它是一种抽象,对现实世界中事物的抽象,在C#中使用class关键字声明一 ...
- Python面向对象之常用的特殊方法(5)
Python面向对象里面有很多特殊方法,例如__init__(构造方法),__del__(析构方法),这些方法对于面向对象编程非常重要,下面列出一些常用的特殊方法 (1)__call__ class ...
- C#可扩展编程之MEF学习笔记(三):导出类的方法和属性
前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...
- ASP.NET -- WebForm -- HttpResponse 类的方法和属性
ASP.NET -- WebForm -- HttpResponse 类的方法和属性 1. HttpResponse 类的方法 (1) AddCacheDependency: 将一组缓存依赖项与响应关 ...
- Kotlin(2): 优雅地扩展类的方法和属性
欢迎Follow我的GitHub, 关注我的CSDN. 个人博客: http://www.wangchenlong.org/, 最新内容. Kotlin由JetBrains公司推出, 是兼容Java的 ...
- python-获取类名和方法名,动态创建类和方法及属性
获取类名和方法名1.在函数外部获取函数名称,用.__name__获取2.在函数内部获取当前函数名称,用sys._getframe().f_code.co_name方法获取3.使用inspect模块动态 ...
- day20-Python运维开发基础(装饰器 / 类中的方法 / 类的方法变属性)
1. 装饰器 / 类中的方法 / 类的方法变属性 # ### 装饰器 """ 定义:装饰器用于拓展原来函数功能的一种语法,返回新函数替换旧函数 优点:在不更改原函数代码的 ...
随机推荐
- 高通camera结构(摄像头基础介绍)
摄像头基础介绍 一.摄像头结构和工作原理. 拍摄景物通过镜头,将生成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加工处理,再被送到电脑中进 ...
- CSS 媒体类型
CSS 媒体类型 媒体类型允许你指定文件将如何在不同媒体呈现.该文件可以以不同的方式显示在屏幕上,在纸张上,或听觉浏览器等等. 一.媒体类型 一些CSS属性只设计了某些媒体.例如"voice ...
- 20145335郝昊《java程序设计》第7周学习总结
20145335郝昊 <Java程序设计>第7周学习总结 教材学习内容总结 认识时间与日期 格林威治标准时间:简称GMT时间,参考格林威治皇家天文台的标准太阳时间. 世界时:简称UT,借由 ...
- 一键安装 zabbix 2.0 版本 脚本
原文地址: http://blog.csdn.net/u012449196/article/details/53859068 本文修改了原文中的部分错误,此脚本适用于zabbix 2.0 版本,以版本 ...
- random模块中最常用的几个函数
转自:http://www.cnblogs.com/yd1227/archive/2011/03/18/1988015.html 随机整数:>>> import random> ...
- PyTorch源码解读之torchvision.transforms(转)
原文地址:https://blog.csdn.net/u014380165/article/details/79167753 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- 字典树应用 - poj1002
字典树应用 - poj 1002 Description Businesses like to have memorable telephone numbers. One way to make a ...
- 秒懂算法1——冒泡排序,及一种小改进(C#实现)
算法思路: 重复走访每两个相邻元素,比较大小交换位置,直至排序完成. 有兴趣电话可以看一下这个[冒泡排序踢踏舞]的视频,很形象的演示了排序过程,额呵呵~~ 性质: 冒泡排序是一种原地排序(只有常数个元 ...
- PHP闭包 function() use(){}
php的闭包(Closure)也就是匿名函数.是PHP5.3引入的. 闭包的语法很简单,需要注意的关键字就只有use,use意思是连接闭包和外界变量. $a =function()use($b) { ...
- 在 Spark 中使用 IPython Notebook
本文是从 IPython Notebook 转化而来,效果没有本来那么好. 主要为体验 IPython Notebook.至于题目,改成<在 IPython Notebook 中使用 Spark ...