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 类和对象相关推荐

  1. python的类和对象_Python类与对象实验

    一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. 二. ...

  2. Python面对对象编程——对象、类详解及实例

    Python中类与对象的初认识 1.Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的 ...

  3. python里面的类和对象_Python中类和对象在内存中是如何保存?

    类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份,大致如下图: 如上图所示,根据类创建对象时,对象中除了封装 name 和 age 的值之外,还会保存一个类对象指针,该值 ...

  4. python里的类与一切事物都是对象

    对于python,一切事物都是对象,对象基于类创建 列如 name='csdcs' li=[1,3,43] 上面两个都是对象,因为它们都是python中的 类里面存着许多的功能,功能的集合,     ...

  5. python类的实例方法必须创建对象前还是后可以调用_classmethod可以来调用类的属性,类的方法,实例化对象...

    classmethod可以来调用类的属性,类的方法,实例化对象,今天番茄加速就来讲一下. classmethod() classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第 ...

  6. Python 的类其实是一个特殊的对象

    Python 中的类是一个特殊的对象. Python 中一切皆对象: class AAA:定义的类属于类对象. obj1 = AAA(): 属于实例对象. 在程序运行时,类同样会被加载到内存,类是一个 ...

  7. python中简述对象和类的关系_Python学习笔记(七)对象和类

    什么是对象 Python中所有的数据都是以对象的形式存在,无论是简单的数字类型还是复杂的代码模块.在Python中,当我们想要创建属于自己的对象或者修改已有对象的行为时,才需要关注对象的内部实现细节. ...

  8. Python基础day08【面向对象(类、对象、属性)、魔方方法(init、str、del、repr)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]   目录 0.复习 1.类外部添加和获取对象属性 2.类内部操作属性 3.魔法方法 3.1.__i ...

  9. python学习高级篇(part10)--类对象的特殊方法和特殊属性

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__del__()` 类对象的特殊方法之`__getattr__()` 类对象的特殊方法之`__getitem__ ...

最新文章

  1. 【Qt】Qt多屏编程,在指定显示屏上显示指定对话框
  2. 【建站系列教程】2.3、分享一些小说的api接口
  3. 用 Flask 来写个轻博客 (17) — MV(C)_应用蓝图来重构项目
  4. MySQL数据库-笔记06【SQL的4种连接查询、事务】
  5. mysql正则替换字符串_mysql中替换字符串(正则) 模糊
  6. ODAC(V9.5.15) 学习笔记(十九)主键值自动生成
  7. [转]跨库数据表复制
  8. python测验4_Python小测试_4
  9. Jquery实现验证码功能 完美效果 jsp php 页面均可调用
  10. 阿里巴巴Java 程序员常用的 10 款开源工具!用好了,事半功倍!
  11. python 读取远程服务器文件
  12. 【Java】菜鸟教程Java基础测试刷题笔记
  13. Unity3D 场景编辑器扩展学习笔记-EditorWindow
  14. HTML页面 引用js文件中文乱码
  15. 腾讯云IM-SDK集成(web端)完成IM登录
  16. SpringCloud 单Eureka简单例子consumer-provider
  17. gitter 卸载_最佳Gitter频道:转到
  18. RTKLIB学习总结(六)导航电文、卫星位置计算
  19. MATLAB如何读取文件某一行的内容,如何读取文件的某一行
  20. 计算机网络-应用层-Web和HTTP

热门文章

  1. python使用threading模块实现多线程
  2. 怎么判断程序运行的当前目录在哪?关键词:根目录
  3. python signal模块的使用(自定义超时异常)
  4. Intel Realsense D435 关于开放环境下的目标识别 曝光量参数的自动设定机制
  5. Intel Realsense 如何获取已连接所有摄像头的序列号参数?context() query_devices() size() camera_info device_list
  6. Linux下的Ubuntu16.04系统配置并使用USB转串口(串口转USB),最终使用python的serial和pyserial包实现串口的打开并读取数据
  7. JVM PrintGCDetails打印GC细节
  8. python读取.so_Python入门-编译安装Python3教程
  9. layui表格合并单元格多表_layui动态表格之合并单元格
  10. mstem函数怎么定义_PYTHON--函数定义