python 类和对象 atm_Python 类和对象
1、python中初始化实例属性 必须在__init__(self,…)方法内(注意:双下划线)初始化实例,第一个参数必须为self。
如需动态添加属性,可用 **kw
class Person(object):
def __init__(self,name,gender,birth,**kw):
self.name = name
self.gender = gender
self.birth = birth
for k,v in kw.iteritems() :
setattr(self,k,v)
xiaoming = Person(‘Xiao Ming‘, ‘Male‘, ‘1990-1-1‘, job=‘Student‘)
print xiaoming.name
print xiaoming.job
2、python中访问限制
Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。
如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。
以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。
class Person(object):
def __init__(self, name):
self.name = name
self._title = ‘Mr‘
self.__job = ‘Student‘
p = Person(‘Bob‘)
print p.name
# => Bob
print p._title
# => Mr
print p.__job
# => Error
Traceback (most recent call last):
File "", line 1, in
AttributeError: ‘Person‘ object has no attribute ‘__job‘
3、python中创建类属性
实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。
class Person(object):
address = ‘Earth‘
def __init__(self, name):
self.name = name
调用 Person.address 即可获得类属性,通过实例对象也可以获得类属性
class Person(object):
count = 0
def __init__(self,name=‘Smith‘):
Person.count = Person.count + 1
self.name = name
p1 = Person(‘Bob‘)
print Person.count
p2 = Person(‘Alice‘)
print Person.count
p3 = Person(‘Tim‘)
print Person.count
p4 = Person()
p5 = Person()
print Person.count
注意,python不支持构造函数的重载。但通过设置默认值,调用构造函数时就可以省略参数。
如 p4 = Person()
4、python中类属性和实例属性名字冲突怎么办
在实例中修改类属性,可以吗?
class Person(object):
address = ‘Earth‘
def __init__(self, name):
self.name = name
p1 = Person(‘Bob‘)
p2 = Person(‘Alice‘)
print ‘Person.address = ‘ + Person.address
p1.address = ‘China‘
print ‘p1.address = ‘ + p1.address
print ‘Person.address = ‘ + Person.address
print ‘p2.address = ‘ + p2.address
当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。
类的属性也有访问权限,带双下划线(__xxx)的属性无法从外部访问。
5、python中定义实例方法
类实例方法的定义在类体中,第一个参数必须是self,调用时无需显示传入。
class Person(object):
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
a = Person("Jim")
a.get_name()
6、python中方法也是属性
上节中get_name使用下面方式调用时:
print p1.get_name
将返回一个方法,而不是函数返回值
fun = p1.get_name
print fun()
能得到name的值。
可以动态的把方法绑定到一个对象上去(虽然并不常用):
import types
def fn_get_grade(self):
if self.score >= 80:
return ‘A‘
if self.score >= 60:
return ‘B‘
return ‘C‘
class Person(object):
def __init__(self, name, score):
self.name = name
self.score = score
p1 = Person(‘Bob‘, 90)
p1.get_grade = types.MethodType(fn_get_grade, p1, Person)
print p1.get_grade()
# => A
p2 = Person(‘Alice‘, 65)
print p2.get_grade()
# ERROR: AttributeError: ‘Person‘ object has no attribute ‘get_grade‘
# 因为p2实例并没有绑定get_grade
7、python中定义类方法
通过@classmethod语句将方法绑定到Person类上。
类方法中不用self,使用cls代指类。
class Person(object):
__count = 0
@classmethod
def how_many(cls):
return cls.__count
def __init__(self,name):
Person.__count += 1
self.name = name
print Person.how_many()
p1 = Person(‘Bob‘)
print Person.how_many()
python 类和对象 atm_Python 类和对象相关推荐
- python的类和对象_Python类与对象实验
一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. 二. ...
- Python面对对象编程——对象、类详解及实例
Python中类与对象的初认识 1.Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的 ...
- python里面的类和对象_Python中类和对象在内存中是如何保存?
类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份,大致如下图: 如上图所示,根据类创建对象时,对象中除了封装 name 和 age 的值之外,还会保存一个类对象指针,该值 ...
- python里的类与一切事物都是对象
对于python,一切事物都是对象,对象基于类创建 列如 name='csdcs' li=[1,3,43] 上面两个都是对象,因为它们都是python中的 类里面存着许多的功能,功能的集合, ...
- python类的实例方法必须创建对象前还是后可以调用_classmethod可以来调用类的属性,类的方法,实例化对象...
classmethod可以来调用类的属性,类的方法,实例化对象,今天番茄加速就来讲一下. classmethod() classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第 ...
- Python 的类其实是一个特殊的对象
Python 中的类是一个特殊的对象. Python 中一切皆对象: class AAA:定义的类属于类对象. obj1 = AAA(): 属于实例对象. 在程序运行时,类同样会被加载到内存,类是一个 ...
- python中简述对象和类的关系_Python学习笔记(七)对象和类
什么是对象 Python中所有的数据都是以对象的形式存在,无论是简单的数字类型还是复杂的代码模块.在Python中,当我们想要创建属于自己的对象或者修改已有对象的行为时,才需要关注对象的内部实现细节. ...
- Python基础day08【面向对象(类、对象、属性)、魔方方法(init、str、del、repr)】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] 目录 0.复习 1.类外部添加和获取对象属性 2.类内部操作属性 3.魔法方法 3.1.__i ...
- python学习高级篇(part10)--类对象的特殊方法和特殊属性
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__del__()` 类对象的特殊方法之`__getattr__()` 类对象的特殊方法之`__getitem__ ...
最新文章
- 【Qt】Qt多屏编程,在指定显示屏上显示指定对话框
- 【建站系列教程】2.3、分享一些小说的api接口
- 用 Flask 来写个轻博客 (17) — MV(C)_应用蓝图来重构项目
- MySQL数据库-笔记06【SQL的4种连接查询、事务】
- mysql正则替换字符串_mysql中替换字符串(正则) 模糊
- ODAC(V9.5.15) 学习笔记(十九)主键值自动生成
- [转]跨库数据表复制
- python测验4_Python小测试_4
- Jquery实现验证码功能 完美效果 jsp php 页面均可调用
- 阿里巴巴Java 程序员常用的 10 款开源工具!用好了,事半功倍!
- python 读取远程服务器文件
- 【Java】菜鸟教程Java基础测试刷题笔记
- Unity3D 场景编辑器扩展学习笔记-EditorWindow
- HTML页面 引用js文件中文乱码
- 腾讯云IM-SDK集成(web端)完成IM登录
- SpringCloud 单Eureka简单例子consumer-provider
- gitter 卸载_最佳Gitter频道:转到
- RTKLIB学习总结(六)导航电文、卫星位置计算
- MATLAB如何读取文件某一行的内容,如何读取文件的某一行
- 计算机网络-应用层-Web和HTTP
热门文章
- python使用threading模块实现多线程
- 怎么判断程序运行的当前目录在哪?关键词:根目录
- python signal模块的使用(自定义超时异常)
- Intel Realsense D435 关于开放环境下的目标识别 曝光量参数的自动设定机制
- Intel Realsense 如何获取已连接所有摄像头的序列号参数?context() query_devices() size() camera_info device_list
- Linux下的Ubuntu16.04系统配置并使用USB转串口(串口转USB),最终使用python的serial和pyserial包实现串口的打开并读取数据
- JVM PrintGCDetails打印GC细节
- python读取.so_Python入门-编译安装Python3教程
- layui表格合并单元格多表_layui动态表格之合并单元格
- mstem函数怎么定义_PYTHON--函数定义