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个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...
随机推荐
- 5.vs的各个组成部分
启动vs (1).双击vs的打开图标 (2).输入devenv 编写项目时,命名的时候,尽量不要使用中文. 我们暂时将.cs文件理解为是一个类文件. 在 视图菜单 下可以打开 解决方案资源管理器 ...
- Mysql 求时间 between 昨天 and 上个月的今天 等时间函数
问题: Mysql表中一列create_time,类型datetime(YYYY-MM-DD HH:MM:SS),想获取上个月今天到昨天的数据. select * from 表名 where date ...
- 设计模式之装饰器模式io的小入门(十一)
装饰器模式详解地址 原文总结 定义: 在不必改变原类文件和使用继承的情况下, 动态的扩展一个对象的功能. 通过创建一个包装对象, 也就是装饰来包裹真实的对象 部分详解提示 看了一些文档, 装饰器模式非 ...
- Oracle笔记4-pl/sql-分支/循环/游标/异常/存储/调用/触发器
一.pl/sql(Procedure Language/SQL)编程语言 1.概念 PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把 ...
- 线程队列queue
队列queue 队列用于线程之间安全的信息交换 队列和列表的区别:队列里的信息get()后就没了,而列表获取数据则是copy,原列表里的值还在 使用前先实例化队列 q = queue.Queue(ma ...
- sudo使用
/etc/sudo.conf /etc/sudoers /etc/sudoers.d/ /etc/sudo-ldap.conf /etc/sudoer sudo安全策略配置文件 Defaults re ...
- webpack-dev-server启动后, localhost:8080返回index.html的原理
webpack-dev-server是一个采用Node.js Express实现的微型服务器, 内部使用webpack-dev-middleware来响应发送到服务器监听单口的HTTP请求. webp ...
- spring依赖注入(转)
转自:https://blog.csdn.net/taijianyu/article/details/2338311/ Spring 能有效地组织J2EE应用各层的对象.不管是控 制层的Action对 ...
- 1.1 NBU基本概念
1.1 NBU基本概念 1) Policy(备份策略) 备份策略定义一台或几台服务器的备份方法.它包括哪些服务器需要备份.备份哪些目录或文件.在什么时间备份.采用什么方式进行备份等.配置NBU主要指定 ...
- [Pytorch] pytorch笔记 <三>
pytorch笔记 optimizer.zero_grad() 将梯度变为0,用于每个batch最开始,因为梯度在不同batch之间不是累加的,所以必须在每个batch开始的时候初始化累计梯度,重置为 ...