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. python 远程执行命令

    1.简单版 # coding: utf-8 import paramiko import re from time import sleep def ssh(): ssh = paramiko.SSH ...

  2. 58 matlab 编程

    0 引言 matlab中有些东西记录一下 1 matlab coder matlab命令行窗口输入: coder 回车即可打开matlab coder 窗口.接着,matlab将引导你把matlab格 ...

  3. P1831 杠杆数

    P1831 杠杆数 题目描述 如果把一个数的某一位当成支点,且左边的数字到这个点的力矩和等于右边的数字到这个点的力矩和,那么这个数就可以被叫成杠杆数. 比如4139就是杠杆数,把3当成支点,我们有这样 ...

  4. 3. Image Structure and Generation

    名词 Extensible Linking Format(ELF) 3.1 The structure of an ARM ELF image ARM ELF映像包含sections, regions ...

  5. servlet的xml配置详解

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns ...

  6. JS与Jquery的事件委托机制

    传送:http://www.ituring.com.cn/article/467 概念: 什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委 ...

  7. linux 平台安装JDK环境

    1.检查一下系统中的jdk版本 [root@localhost software]# java -version 2.检测jdk安装包 [root@localhost software]# rpm - ...

  8. 如何 clean IntelliJ IDEA 中的工程

    如何 clean IntelliJ IDEA 中的工程 1.点击“build”,选择“Build Artifacts” 2.点击“clean”,就可以了:然后重新,debug run 就完成了.   ...

  9. 关于js私钥加密公钥解密的问题

    博客荒废很久了,最近遇到一个问题,看网上的说明比较少,所以写下来给大家一个参考 一般来说rsa算法都是使用公钥加密,私钥解密,或者私钥签名,公钥验签.但总有特别的时候会想要用私钥加密,公钥解密,但是j ...

  10. 2019-8-31-dotnet-判断程序当前使用管理员运行降低权使用普通权限运行

    title author date CreateTime categories dotnet 判断程序当前使用管理员运行降低权使用普通权限运行 lindexi 2019-08-31 16:55:58 ...