Python 里的所有数据都是以对象形式存在的,对象是类的实例。

定义类(class)

使用class来定义一个类。

比如,定义一个cat类,如下:

class Cat():
  def __init__(self):
  self.name = name

创建两个cat类的实例cat1,cat2,如下:

cat1 = Cat('mimi')
cat2 = Cat('momo')

类中的__init__为初始化函数,在实例创建的时候执行。它的第一个参数必须是self.

继承

一个类可以继承另一个类,被继承的类可以称为'父类'或者'基类'。使用继承得到的新类会自动获得旧类中的所有方法,而不需要进行任何复制。在新类中,可以定义新的方法,也可以对继承的方法修改,修改后会覆盖原有的方法。

在python中,所有的类都继承了object类。

下面是一个简单的类继承的例子。

class Cat():
  def __init__(self):
  self.name = name
  def play():
    print("I like play") class BossCat(Cat):
def play(ball):
    print("I like play %s", %ball)

BossCat的play方法覆盖了Cat类的play方法,所以,这两个类各自的对象执行play时会有不一样的表现。

使用super方法

子类中的__init__()方法(如果定义)会覆盖父类中__init__()。如果子类的__init__()方法要继承父类的__init__()方法的参数就可以使用super方法,如下:

>>> class Person():
def __init__(self,name):
self.name = name >>> class EmailPerson(Person):
def __init__(self,name,email):
super().__init__(name)
self.email = email

属性的访问和设置

python中所有特性都是公开的,如果想要在类中实现一些私有属性的话,可以:

1 getter 方法和setter 方法

比如:

>>> class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age def get_name(self):
return self.name def set_name(self,name):
self.name = name >>> perter= Person('peter',28)
>>> perter.name
'peter' >>> perter.name = 'perter'
>>> perter.name
'perter'
>>>

2 使用@property获取属性, @xxx.setter来设置属性值。

比如:

class Student(object):

    @property
def birth(self):
return self._birth @birth.setter
def birth(self, value):
self._birth = value @property
def age(self):
return 2014 - self._birth >>> S1 = Student()
>>> S1.birth = 1989
>>> S1.birth
1989
>>> S1.age
25
>>> S1.birth = 1990
>>> S1.birth
1990
>>> S1.age
24
>>> S1.age = 26
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
S1.age = 26
AttributeError: can't set attribute

3 使用'__'来定义内部私有/隐藏的属性。

如下:直接访问__定义的属性时会报错。

>>> class Person(object):
def __init__(self,input_name,age):
self.__name = input_name
self.__age = age @property
def name(self):
return self.__name
@name.setter
def name(self,input_name):
self.__name = input_name >>> Peter = Person('Peter',29)
>>> Peter.name
'Peter' >>> Peter.__name
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
Peter.__name
AttributeError: 'Person' object has no attribute '__name'

实例方法/类方法/静态方法

实例方法(instance method): 以self作为第一个参数的方法。当调用方法时,python会将调用该方法的对象作为self参数传入。

类方法(class method):使用@classmethod修饰的方法。注意,类方法的第一个参数是类本身cls。

>>> class TeamA():
num = 0
def __init__(self):
TeamA.num += 1 @classmethod
def counter(cls):
print("instance number is: %s" %cls.num) >>> a1=TeamA()
>>> TeamA.counter()
instance number is: 1
>>> a2 = TeamA()
>>> TeamA.counter()
instance number is: 2
>>>

静态方法(static method): 用@staticmethod 修饰。

Python对象和类的更多相关文章

  1. python 对象和类

    python中所有数据都是以对象形式存在.对象既包含数据(变量),也包含代码(函数),是某一类具体事物的特殊实例. 面向对象的三大特性为封装.继承和多态. 1.定义类 #定义空类 class Pers ...

  2. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  3. 对于python,一切事物都是对象,对象基于类创建

    新建列表.新建string字符串 li1 = [1, 2, 3, 4] li2 = list([1, 2, 3]) s1 = "abc" s2 = str("abc&qu ...

  4. 从0开始的Python学习012数据结构&对象与类

    简介 数据结构是处理数据的结构,或者说,他们是用来存储一组相关数据的. 在Python中三种内建的数据结构--列表.元组和字典.学会了使用它们会使编程变得的简单. 列表 list是处理一组有序的数据结 ...

  5. python的类和对象(类的静态字段)

    转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...

  6. Python里的类和对象简介

    ---恢复内容开始--- Python里的类  对象=属性+方法: 对象的属性主要是指主要的特征和参量,而方法主要是指函数: 类是一个具有一定特征和方法的集合,而对象是类的一个:类和对象的关系就如同模 ...

  7. Python面试题之Python对象反射、类反射、模块反射

    python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 一.getattr 对象获取 class Manager: role = &quo ...

  8. python入门17 类和对象

    类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处)  成员变量(self.变量) 类的方法( @classmethod,cls参数)   成员方法( self参数 )  静态方法 ...

  9. Python之面向对象类和对象

    Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object): """ 类里定义一类事物共同的技能. 可以是变量,也可是函 ...

随机推荐

  1. Win7如何部署定制的Quicklaunch图标

    在严格的网络管理环境中,最终用户的权限被限制得比较严格,被禁止随意改变系统的行为.在我们的网络环境中,学生是被禁止添加/删除QuickLaunch上的图标的,不仅如此,无线网络,打印机等等,都受到严格 ...

  2. Delphi中任务栏状态区的编程

    在Windows桌面的任务栏上有一个凹陷的区域,其中显示着系统时钟以及一些图标,这个长方形的区域便是Windows的任务栏状态区(taskbar status area).本文将介绍使用Borland ...

  3. kafka和flume进行整合的日志采集的confi文件编写

    配置flume.conf 为我们的source channel sink起名 a1.sources = r1 a1.channels = c1 a1.sinks = k1 指定我们的source收集到 ...

  4. CF1265B Beautiful Numbers

    题意 给一个长度为\(n\)的排列\(P\),求对于\(1\) 到 \(n\)中的每个数\(m\),是否能找到一段长度为\(m\)的区间使得区间内的数是一个\(1\)到\(m\)的排列. 输出一个\( ...

  5. Python-爬虫-HTTP协议请求之GET请求

    我们在百度搜索时,输入关键词,比如“hello”,URL发生变化,如下: https://www.baidu.com/s?wd=hello&rsv_spt=1&rsv_iqid=0xf ...

  6. Dll注入技术之APC注入

    APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:     1)当EXE里某个线程执行到SleepEx( ...

  7. 在桌面上显示IE图标(非快捷键)

    1.在桌面点击右键选择"属性"打开"显示属性",选择"桌面">"自定义桌面">"常规"& ...

  8. Mybatis笔记 - Mybatis框架简介

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上 ...

  9. LightOJ 1245 - Harmonic Number (II)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1245 题意:仿照上面那题他想求这么个公式的数.但是递归太慢啦.让你找公式咯. ...

  10. 2018湘潭大学程序设计竞赛【D】

    题目链接:https://www.nowcoder.com/acm/contest/105/D 题意:就是数的fib表示方法.按权展开,又按二进制算出结果输出. 题解:贪心和数论吧.找到跟数最接近的f ...