Python对象和类
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对象和类的更多相关文章
- python 对象和类
python中所有数据都是以对象形式存在.对象既包含数据(变量),也包含代码(函数),是某一类具体事物的特殊实例. 面向对象的三大特性为封装.继承和多态. 1.定义类 #定义空类 class Pers ...
- Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
- 对于python,一切事物都是对象,对象基于类创建
新建列表.新建string字符串 li1 = [1, 2, 3, 4] li2 = list([1, 2, 3]) s1 = "abc" s2 = str("abc&qu ...
- 从0开始的Python学习012数据结构&对象与类
简介 数据结构是处理数据的结构,或者说,他们是用来存储一组相关数据的. 在Python中三种内建的数据结构--列表.元组和字典.学会了使用它们会使编程变得的简单. 列表 list是处理一组有序的数据结 ...
- python的类和对象(类的静态字段)
转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...
- Python里的类和对象简介
---恢复内容开始--- Python里的类 对象=属性+方法: 对象的属性主要是指主要的特征和参量,而方法主要是指函数: 类是一个具有一定特征和方法的集合,而对象是类的一个:类和对象的关系就如同模 ...
- Python面试题之Python对象反射、类反射、模块反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 一.getattr 对象获取 class Manager: role = &quo ...
- python入门17 类和对象
类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处) 成员变量(self.变量) 类的方法( @classmethod,cls参数) 成员方法( self参数 ) 静态方法 ...
- Python之面向对象类和对象
Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object): """ 类里定义一类事物共同的技能. 可以是变量,也可是函 ...
随机推荐
- Codeforces 1154B Make Them Equal
题目链接:http://codeforces.com/problemset/problem/1154/B 题意:给定数组,可以给任意的的元素加上D 或者 减去D,如果能 使数组元素都相等,输出最小的D ...
- 牛客练习赛26 A 平面(结论题)
题目链接:https://ac.nowcoder.com/acm/contest/907/A 思路:结论题,当做2n条直线,参考资料https://blog.csdn.net/qq_34131212/ ...
- css中图片有缩放和转动效果
现在html中利用div来包裹住一张图片. <div class="xuanzhuan"> <img src="images/top.png" ...
- 今天学会了如何察看SSDT里面的东西、修改里面的地址
简简单单,虽然不懂它的道理,就算会用了吧 哎,内核级的东西调着也费事 因为一个 extern 没写,我可怜的虚拟机,连续蓝屏了4次. typedef struct _ServiceDescriptor ...
- 9_山寨系统调用 SystemCallEntry
思想: 再次在 GDT 中偷内存 搭建 系统调用需要的 逻辑框架与功能实现: 基本分解妄想: 构建系统调用的代码: 拷贝到 偷取的内存中: idt 向量 序号21位置: 8003ee00`0008f1 ...
- 前端常用的库和实用技术之JavaScript 模块化
模块化概念 AMD是requirejs在推广过程中对模块化定义的规范化产出. 异步加载模块,依赖前置,提前执行 Define定义模块define(['require','foo'],function( ...
- Python_pymysql
pymysql安装:pip3 install pymysql 第一个实例:连接数据库进行用户验证 条件:数据库中已存在一个用户表,包含用户名.密码 import pymysql user = in ...
- python实现操作excel,数据写入excel的一行或者一列
# _*_ coding:utf-8 _*_ import random import xlwt,string class ImportData(object): def create_num(sel ...
- 在vue中使用高德地图vue-amap
1.安装 vue-amap我安装指定版本0.5.10的版本 npm i --save vue-amap@0.5.10 2.main.js中的配置 key申请地址教程:https://lbs.amap. ...
- Java 基础 - java序列化 & serialVersionUID
ref: https://www.cnblogs.com/duanxz/p/3511695.html ------------------- SerialVersionUID概述 SerialVers ...