Python学习笔记 - day7 - 类
类
面向对象最重要的概念就是类(Class)和实例(Instance),比如球类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。在Python中,定义类是通过class
关键字:
class People(object): # 自定义一个People类,括号内的object表示当前类继承object类
'''this is my first object''' # 类的注释 name = 'daxin' # 类的属性
age = 18 def eat(self): # 类的方法
print('{0} eating !'.format(self.name)) ren = People() # 实例化一个ren对象
ren.eat() # 调用对象的方法
object是所有类的父类,不写的话,默认继承object类,当然函数可以包含注释,类也可以,在类中使用三个单引号表示注释。
类的构造器
__init__ 构造函数,在生成对象时调用。由于类可以起到模版的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性添加进去,通过定义一个特殊的__init__方法,我们就可以在创建实例的时候,把自定义的属性绑定上。
class People(object):
'''this is my first object''' def __init__(self,name,age): # 类的构造函数,除了self意外的参数都需要在实例化的时候传递进去
self.name = name # 对象的name属性
self.age = age # 对象的age属性 def eat(self):
print('{0} eating !'.format(self.name)) ren = People('daxin',18)
ren.eat()
注意到:__init__方法的第一个参数永远是self,表示创建实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self指向了创建的实例本身。
类的继承
当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。
子类具有父类的属性和方法,还记得我们之前创建的People类吗,它也是继承了object类的。
class People(obejct): # 父类表示人类
pass class Yelloman(People): # 继承了People类的黄种人
pass class Chinapeople(yelloman,People) # 同时继承People,yelloman的中国人
pass
注意:
在继承种类的构造(__init__())方法不会自动调用,需要在子类的构造方法种亲自调用
调用方法时,首先查找子类的方法,如果没有才会去父类中查找。
类的重写
通过继承我们可以得到父类的各种属性或者功能,但是需要注意的是父类的__init__函数不会在继承的时候被执行, 并且如果我们想重定义父类中的某个函数,该怎么办呢?
- 使用super函数来执行父类的__init__函数
- 直接编写同名函数,覆盖父类函数,因为查找方式是先从子类中查找,子类中没有,才会去父类中查找。
class People(object): def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('{0} eating !'.format(self.name)) class ren(People): def __init__(self,name,age,sex):
super(ren, self).__init__(name,age) # 使用super执行父类的__init__方法,并且传递name,age 给父类的init函数
self.sex = sex def get_name(self):
return self.name def get_age(self):
return self.age def get_sex(self):
return self.sex def eat(self): # 如果存在和父类同名的函数,会直接覆盖父类函数
print('hello world') a = ren('daxin',18,'men')
print(a.get_name())
print(a.get_age())
print(a.get_sex())
a.eat()
类的私有属性和私有方法
- 句柄用于区分不同的对象(实例化出来的对象的名称可以称之为句柄)
- 对象的属性和方法与类中的成员变量和成员函数对应
obj = myclass() # 创建类的一个实例(对象)
# 通过对象来调用方法和属性
class People(object):
color = 'yellow'
__age = 30
def say(self):
self.color = 'back'
print self.color
print self.__age ren = People()
ren.say()
ren.color = 'white' ②
ren.__dict__
People.__dict__ ③
ren.__age ①
# ①:由于__age是内部变量 ,所以无法在class外部调用,我们一般把类的私有属性,在类的成员函数中调用,这样我们就可以在外部来调用类的成员函数来调用内部变量,或者使用ren._People__age注意累的名字前要加_,一般只在测试用!
# ② 通过实例化的对象,我们就可以去修改对象的属性,但是不会影响类的成员属性
# ③ __dict__内置函数,通过对象调用它,会把成员函数中的变量,以字典的形式存储,如果通过类调用它,它会列出类中的所有运行过程中产生的变量,并且以字典存储。
类的内置方法
def __str__(self):
return 'this is People object'
def __init__(self,name,age): -->可以添加参数
self.name = name
self.age = age --> 初始化的时候,自动赋值的属性
self.talk() -->可以在初始化的时候,直接执行某些方法,用于在实例化的时候,自动执行
def __del__(self):
print('bye bye')
Python学习笔记 - day7 - 类的更多相关文章
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- python学习笔记1-元类__metaclass__
type 其实就是元类,type 是python 背后创建所有对象的元类 python 中的类的创建规则: 假设创建Foo 这个类 class Foo(Bar): def __init__(): ...
- Python学习笔记12—类
典型的类和调用方法: #!/usr/bin/env Python # coding=utf-8 __metaclass__ = type #新式类 class Person: #创建类 def __i ...
- Python 学习笔记 - 10.类(Class) 1
定义 Python 的 Class 比较特别,和我们习惯的静态语言类型定义有很大区别. 1. 使用一个名为 __init__ 的方法来完成初始化.2. 使用一个名为 __del__ 的方法来完成类似析 ...
- Python学习笔记008_类_对象_继承_组合_类相关的BIF
# 对象 = 属性 + 方法>>> # Python中的类名约定以大写字母开始>>> # tt = Turtle() 这就是创建类实例的方法,其它语言用new ,它 ...
- python学习笔记(七) 类和pygame实现打飞机游戏
python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
- Python学习笔记:类
类可以将数据与函数封装起来,用一个例子解释,先定义一个类: class athlete: def __init__(self,a_name,a_dob=None,a_times=[]): self.n ...
- Python 学习笔记16 类 - 导入
我们在编码的过程中,可能会给对象添加越来越多的功能,即使我们使用了继承,也不可避免的使文件越来越臃肿. 为了避免这种情况, Python允许将对象存储在模块中,并且可以在其他模块中进行导入. 其实这和 ...
- Python 学习笔记15 类 - 继承
我们在编程的过程中,并非都是要重头开始.比如其他人已经有现成的类,我们可以使用其他找人编写的类.术语称之为: 继承. 当一个类继承例外一个类时,它可以获得这个类的所有属性和方法:原有的类称之为 父类, ...
随机推荐
- Charles的Https抓包及弱网配置
一.Charles的主要功能 (1)截取Http 和 Https 网络封包. (2)支持重发网络请求,修改请求参数,方便后端调试. (3)支持模拟弱网环境. 二.配置简单抓包 1.设置系统代理:勾选P ...
- virtualBox 安装 CentOs 6.8 以及网络配置
安装 virtual box 基本设置: 1.创建虚拟电脑 类型:Linux 版本:Red Hat(64-bit) 这个64/32 和电脑具体配置关系. 然后就是路next or 设置常规的东西. 2 ...
- xadmin站点管理面样样式控制
xadmin可以使用的页面样式控制基本与Django原生的admin一直. list_display 控制列表展示的字段 search_fields 控制可以通过搜索框搜索的字段名称,xadmin使用 ...
- LeetCode - 20. Valid Parentheses(0ms)
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- 安装 Win10 & Ubuntu 16.04 双系统以及 Ubuntu 配置深度学习环境记录
0. 前言 坑爹的Ubuntu晚上运行还是好好的,第二天中午的时候打开机器发现屏幕分辨率不正常了:2K屏显示800*600左右的分辨率(无法调节),一个图标一拳头大,窗口和网页显示不全.Google查 ...
- pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...
- vim使用注意事项
vim使用注意事项 1. 中文编码的问题 中文编码有很多,如果文件与vim的终端界面使用的编码不同,那么在vim显示的文件内容将会是一堆乱码. 2. 语系编码转换 命令iconv可以将语系编码进行转换 ...
- B - 整数区间
B - 整数区间 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem Descr ...
- vue.js的特点-1
1. Vue.js是数据驱动的,无需手动操作DOM. 它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应的更新. 2. MV ...
- 【bzoj2141】排队 分块+树状数组
题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别, ...