## 类
  - 具体事物的抽象和总结,是事物的共性,由属性和方法两个部分构成,比如一个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类与对象--基础的更多相关文章

  1. python类与对象各个算数运算魔法方法总结

    1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...

  2. python 类和对象的属性

    python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...

  3. MOOC C++笔记(二):类和对象基础

    第二周:类和对象基础 面向对象程序设计的四个基本特点 抽象.封装.继承.多态. 面向对象程序设计的过程 1.从客观事物抽象出类 抽象出的事物带有成员函数与成员变量(类似于带函数的结构体) 成员变量和成 ...

  4. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

  5. python类、对象

    python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...

  6. python 类和对象

    类和对象 类 1.类的组成    数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用  属性引用:类名.属性(增删改查)   实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...

  7. python 类、对象、方法、属性

    在python中,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) 结论:对象=属性+方法 在python中,把具有相同属性和方法的对象归为一个类(class) ...

  8. python类、对象、方法、属性之类与对象笔记

    python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性(特征)和行为来描述一个对象的.比如家里的小狗, ...

  9. python类与对象基本语法

    面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...

随机推荐

  1. logback.xml日志文件过滤器配置简析

    自定义过滤器 java代码,目的是在mdc中放值,然后在日志中打印 package com.controller; import com.pojo.JsonData; import org.slf4j ...

  2. 反向代理总结-reverse-proxy-with-url-rewrite

    iis 反向代理 : 1. 微软文档 https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/reverse-proxy- ...

  3. flexpager权限控制文件crossdomain.xml

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cross-domain-policy SY ...

  4. Windows到Ubuntu免密登陆

    Windows到Ubuntu免密登陆 首先检查C盘用户文件夹下是否有.ssh文件夹,同时检查该文件夹中是否有至少两个文件,一个是xxx_rsa和xxx_rsa.pub,一个是私钥文件一个是公钥文件. ...

  5. 树checkbox选择jquery实例

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  6. Android自定义控件练手——波浪效果

    这一次要绘制出波浪效果,也是小白的我第一次还望轻喷.首先当然是展示效果图啦: 一.首先来说说实现思路. 想到波浪效果,当然我第一反应是用正余弦波来设计啦(也能通过贝塞尔曲线,这里我不提及这个方法但是在 ...

  7. u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗

    u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文 ...

  8. vos忙时闲时费率不一样怎么设置

    问题: 现有一客户要求上午闲时由原来的9:00追加到9:30 即: 9:30——12:00为忙时 14:00——18:00为忙时 其他为闲时 忙时费率为0.04元即4分 闲时费率为0.025元即2分5 ...

  9. javascript当中的无限分类

    var data = [ {id:100000, name :"1", pid :0}, {id:100100, name :"1-1", pid :10000 ...

  10. 在vue中同时使用过渡和动画

    在上次的动画中,在显示和隐藏有动画效果,但是,刷新页面的时候,第一次的显示没有动画效果 需求:刷新页面的时候也有动画效果 <transition name='fade' appear enter ...