Python类与对象--基础
## 类
- 具体事物的抽象和总结,是事物的共性,由属性和方法两个部分构成,比如一个Person类,有是身高、体重、肤色等属性,也有吃饭、睡觉、观察、等方法
## 对象
- 具体的事物,单一、个体、特性,是一个类的具体实现,比如一个Person类的对象,此对象同样拥有身高、体重、肤色等属性,也有吃饭、睡觉、观察、等方法,但各个Person对象身高、体重、肤色的值并不相同,吃的东西,睡的床,看的电影都不一样
## 定义类
# 定义一个空的Person类
class Person(object):
pass # 类的实例化
someone = Person()
- 对象初始化方法(构造方法),在实例化后立即调用
class Person(object):
def __init__(self):
print("初始化。。。") someone = Person() # 输出:初始化。。。
- 给类添加属性
- 这里的self指的是对象本身
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age someone = Person("Stanley", 22) # 实例化时传入此对象的相关属性
print(someone.name) # 输出:Stanley
print(someone.age) # 输出:22
- 给类添加方法
- 在参数位置上的self表示当前对象本身(本质上来说是一个形式参数),如果通过对象调用一个方法,那么该对象会自动传入当前方法的第一个参数中
- self并不是关键字,只是用于接收对象的普通参数,理论上可以用任何一个普通变量名代替
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age def eat(self, food):
print("I'm eating %s." % food) someone = Person("Stanley", 22)
someone.eat("instant noodle") # 输出:I'm eating instant noodle.
## 代码重用与拓展 -- 继承
- 继承就是从已经有的类中衍生出新的类,并在新的类中添加或修改部分功能
- 使用继承的新类会自动获得父类中的所有方法
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age def eat(self, food):
print("I'm eating %s." % food) class Student(Person):
pass stu = Student("Stanley", 22) # Student类什么都没做,但还是拥有__init__和eat()方法
stu.eat("instant noodle") # 输出:I'm eating instant noodle.
- 可以使用isinstance()函数判断是否是某类的实例
- 子类的实例一定是父类的实例,父类的实例只是父类的实例,在这个例子中,一个学生一定是一个人,但不是所有人都是学生
print(isinstance(stu, Person)) # 输出:True
print(isinstance(stu, Student)) # 输出:True
## 覆盖父类中的方法
- 在子类中定义和父类中某方法名相同的方法,即可用新方法覆盖父类中的方法,包括__init__方法
- 方法覆盖后,子类对象无法在调用父类中的该方法,而父类对象并不受影响
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age def eat(self, food):
print("I'm eating %s." % food) class Student(Person):
def eat(self, food):
print("I'm a student, I eat %s" % food) per1 = Person("Lily", 22)
stu = Student("Stanley", 22)
per1.eat("instant noodle") # 输出:I'm eating instant noodle.
stu.eat("apple") # 输出:I'm a student, I eat apple.
- 给子类添加新方法
- 子类中的新方法父类实例并不能调用
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age def eat(self, food):
print("I'm eating %s." % food) class Student(Person):
def eat(self, food):
print("I'm a student, I eat %s." % food) def do_homework(self):
print("I'm a student, I have to do homework.") per1 = Person("Lily", 22)
stu = Student("Stanley", 22)
stu.do_homework() # 输出:I'm a student, I have to do homework.
per1.do_homework() # AttributeError: 'Person' object has no attribute 'do_homework'
- 在子类中使用父类中的方法 -- super()
- 若在子类中定义__init__方法,则会覆盖掉父类中的__init__方法,所以需要在子类中__init__方法中明确的先调用父类的__init__方法,并传入需要的初始化参数
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age def eat(self, food):
print("I'm eating %s." % food) class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade def eat(self, food):
print("I'm a student, I eat %s." % food) def do_homework(self):
print("I'm a student, I have to do homework.") per1 = Person("Lily", 22)
stu = Student("Stanley", 22, "Junior")
## 对类进行访问限制 -- 封装
- 封装就是对对象成员进行访问限制
- 私有
- 私有成员是最高级别的封装,只能在当前类或者对象中使用
- 在成员前面添加两个下划线即可表示该属性是私有属性
- Python的私有并不是真的私有,是一种称为mangling的改名策略,可以使用对象._classname_attrbutename访问
class Student:
__name = "Stanley"
__age = 18 stu = Student()
print(stu.__name)
# 私有属性无法直接访问
# 输出:AttributeError: 'Student' object has no attribute '__name'
print(stu._Student__name)
# 私有属性可以通过特殊方式访问
# 输出:Stanley
本文参考:
[美]Bill Lubanovic 《Python语言及其应用》
Python类与对象--基础的更多相关文章
- python类与对象各个算数运算魔法方法总结
1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...
- python 类和对象的属性
python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...
- MOOC C++笔记(二):类和对象基础
第二周:类和对象基础 面向对象程序设计的四个基本特点 抽象.封装.继承.多态. 面向对象程序设计的过程 1.从客观事物抽象出类 抽象出的事物带有成员函数与成员变量(类似于带函数的结构体) 成员变量和成 ...
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
- python类、对象
python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...
- python 类和对象
类和对象 类 1.类的组成 数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用 属性引用:类名.属性(增删改查) 实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...
- python 类、对象、方法、属性
在python中,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) 结论:对象=属性+方法 在python中,把具有相同属性和方法的对象归为一个类(class) ...
- python类、对象、方法、属性之类与对象笔记
python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性(特征)和行为来描述一个对象的.比如家里的小狗, ...
- python类与对象基本语法
面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...
随机推荐
- CentOS 搭建Redis4 环境
下载 wget http://download.redis.io/releases/redis-4.0.10.tar.gz 安装步骤 tar xvf redis-4.0.10.tar.gz mak ...
- selenium grid 使用方法
代码和selenium driver相同 只是 启动环境方式不同.至少启动一个hub 一个 node .如需要多个,可以使用端口进行区分. java -jar selenium-server-stan ...
- 动软代码生成器,主子表增加的时候子表的parentID无法插入问题解决方案
StringBuilder strSql=new StringBuilder(); strSql.Append("insert into HT_XunJiaMain("); str ...
- php网站修改默认访问文件的nginx配置
搭建好lnmp后,有时候并不需要直接访问index.php,配置其他的默认访问文件比如index.html这时候需要配置一下nginx才能访问到你想要设置的文件 直接上代码,如下是我的配置的一份简单的 ...
- Element-ui安装与使用(网站快速成型工具)
我之所以将Element归类为Vue.js,其主要原因是Element是(饿了么团队)基于MVVM框架Vue开源出来的一套前端ui组件.我最爱的就是它的布局容器!!! 下面进入正题: 1.Elemen ...
- leetcode:回溯——permutation-sequence,
1. permutation-sequence 顺序排列第k个序列 The set[1,2,3,…,n]contains a total of n! unique permutations. By l ...
- 22 Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- MySQL 开机自启动
MySQL 开机自启动 chkconfig add mysqld 或者 echo "/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc ...
- 【BZOJ5084】hashit(后缀自动机水过)
点此看题面 大致题意: 每次在字符串后面加入或删除一个字符,求本质不同的子串个数. 后缀自动机 先说明,此题后缀自动机的确能过. 但我的后缀自动机比较弱,遇上一个较强的\(Hack\)数据就被卡掉了. ...
- PHP精度问题
PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述 bcadd — 加法bccomp — 比较bcdiv — 相除bcmo ...