python基础篇_006_面向对象(代码片段)

yin-fei yin-fei     2022-12-01     343

关键词:

面向对象

1.初识类:

# 定义一个函数,我们使用关键字 def 
"""
def 函数名(参数):
    ‘‘‘函数说明‘‘‘
    函数体
    return 返回值
"""


def func():
    print("func execute...")
# 定义一个类 使用关键字 class
"""
class 类名:
    ‘‘‘类说明‘‘‘
    类体
"""

class C:
    pass
class Person:
    role = person  # 属性

    def walk(self):
        print("person is walking ... ")  # 动态属性

2.类属性引用和实例化

属性引用:类型.属性

class Person:
    role = person

    def walk(self):
        print("person is walking...")


print(Person.role)  # 查看人的role属性
print(Person.walk)  # 引用人的走路方法,注意,这里不是在调用,引用的是函数地址

 

实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征

class Person:
    role = person

    def __init__(self, name):
        self.name = name

    def walk(self):
        print("person is walking...")


# 类实例化-->对象    对象 = 类名(参数)

p1 = Person("zhangsan")  # Person("zhangsan") 调用__init__(self, name)方法,构造方法

# 查看对象的属性 调用对象的方法
print(p1.role)
p1.walk()

3.类命名空间与对象、实例的命名空间

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

而类有两种属性:静态属性和动态属性

静态属性就是直接在类中定义的变量        类的数据属性是共享给所有对象的
动态属性就是定义在类中的方法            类的动态属性是绑定到所有对象的

创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性

在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

 

4.面向对象三大特性

继承:

新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

python中类的继承分为:单继承和多继承

class ParentClass1:  # 定义父类
    pass


class ParentClass2:  # 定义父类
    pass


class SubClass1(ParentClass1):  # 单继承,基类是ParentClass1,派生类是SubClass
    pass


class SubClass2(ParentClass1, ParentClass2):  # python支持多继承,用逗号分隔开多个继承的类
    pass

先抽象在继承:
技术图片

技术图片

增强代码重用性

子类可以自己实现新的属性和方法,或者重新定义父类的,不会影响父类。

在python3中,子类执行父类的方法也可以直接用super方法.

抽象类与接口类

继承有两种用途:

一:继承基类的方法,并且做出自己的改变或者扩展(代码重用)  

二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能

接口定义:

from abc import ABCMeta, abstractmethod


class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass


class Wechatpay(Payment):
    def pay(self, money):
        print("Wechatpay pay...")

    def fuqian(self, money):
        print(微信支付了%s元 % money)


p = Wechatpay()  
p.pay(100)
依赖倒置原则:
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程

抽象类:
只能被继承,不能实例化

# 一切皆文件
import abc  # 利用abc模块实现抽象类


class All_file(metaclass=abc.ABCMeta):
    all_type = file

    @abc.abstractmethod  # 定义抽象方法,无需实现功能
    def read(self):
        子类必须定义读功能
        pass

    @abc.abstractmethod  # 定义抽象方法,无需实现功能
    def write(self):
        子类必须定义写功能
        pass


# class Txt(All_file):
#     pass
#
# t1=Txt() #报错,子类没有定义抽象方法

class Txt(All_file):  # 子类继承抽象类,但是必须定义read和write方法
    def read(self):
        print(文本数据的读取方法)

    def write(self):
        print(文本数据的读取方法)


class Sata(All_file):  # 子类继承抽象类,但是必须定义read和write方法
    def read(self):
        print(硬盘数据的读取方法)

    def write(self):
        print(硬盘数据的读取方法)


class Process(All_file):  # 子类继承抽象类,但是必须定义read和write方法
    def read(self):
        print(进程数据的读取方法)

    def write(self):
        print(进程数据的读取方法)


wenbenwenjian = Txt()

yingpanwenjian = Sata()

jinchengwenjian = Process()

# 这样大家都是被归一化了,也就是一切皆文件的思想
wenbenwenjian.read()
yingpanwenjian.write()
jinchengwenjian.read()

print(wenbenwenjian.all_type)
print(yingpanwenjian.all_type)
print(jinchengwenjian.all_type)

抽象类与接口类:

抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。

抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计 

多继承接口,接口定义一种规范

多态:多态指的是一类事物有多种形态

 

封装:

 

python面向对象基础(代码片段)

目录1面向对象2类和对象2.1理解类和对象2.1.1类2.1.2对象2.2面向对象实现方法2.2.1定义类2.2.2创建对象2.2.3self3添加和获取对象属性3.1类外面添加对象属性3.2类外面获取对象属性3.3类里面获取对象属性4魔法方法4.1__init__()4.1.1体验__init... 查看详情

python基础之面向对象2(封装)(代码片段)

一、封装定义:   二、作用  三、私有成员:  1、基本概念及作用      2、__slots__手段私有成员:      3、@property属性手段私有成员:     四、基础示例代码  1、用方法封装变量    """... 查看详情

python面向对象编程进阶(代码片段)

前言上上篇我们讲解了Python面向对象编程的基础知识,《Python基础篇:面向对象怎样炼成的》这篇我们继续来讨论面向对象编程相关的内容。目录前言可见性和属性装饰器动态属性静态方法和类方法继承和多态总结可见... 查看详情

python面向对象编程进阶(代码片段)

前言上上篇我们讲解了Python面向对象编程的基础知识,《Python基础篇:面向对象怎样炼成的》这篇我们继续来讨论面向对象编程相关的内容。目录前言可见性和属性装饰器动态属性静态方法和类方法继承和多态总结可见... 查看详情

2022年最新python大数据之python基础面向对象与继承(代码片段)

文章目录1、实例属性的添加和获取2、`__init__()`方法3、带参数的`__init__()`方法4、`__str__()`方法5、`__del__()`方法6、面向对象案例7、单继承8、多继承9、子类中重写父类方法1、实例属性的添加和获... 查看详情

python面向对象编程第05篇__init__方法(代码片段)

...属性。__init__()方法简介当我们创建一个新的对象时,Python会自动调用__init__()方法初始化该对象的属性。__init__()方法和普通方法的不同之处在于它的两端都是两个连续的下划线。所以它也被称为dunderinit,dunder代表了doubleu... 查看详情

python的面向对象(代码片段)

文章目录python面向对象1.面向对象的基础知识2.私有变量和方法python面向对象1.面向对象的基础知识opp(ObjectOrientedProgramming)表示面向对象程序设计类是一群有着相同属性和函数的对象的集合面向对象的四要素,以及他们之间的关系... 查看详情

python之面向对象知识点汇总(小白必会)(代码片段)

目录Python基础之面向对象一、编程思想1、面向过程2、面向对象二、类与对象的创建1、类的语法结构2、定义与调用3、给对象添加独有属性4、对象独有属性修改三、动态、静态方法1、直接在类中定义的函数2、绑定给类的函数3、... 查看详情

python面向对象编程第14篇特殊方法之__bool__(代码片段)

本篇将会介绍如何利用Python__bool__方法定义对象的布尔值。__bool__方法简介自定义类的对象存在一个相关的布尔值。默认情况下该布尔值为True。例如:classPerson:def__init__(self,name,age):self.name=nameself.age=ageif__name__=='... 查看详情

python面向对象编程第14篇特殊方法之__bool__(代码片段)

本篇将会介绍如何利用Python__bool__方法定义对象的布尔值。__bool__方法简介自定义类的对象存在一个相关的布尔值。默认情况下该布尔值为True。例如:classPerson:def__init__(self,name,age):self.name=nameself.age=ageif__name__=='... 查看详情

3.2面向对象基础语法(代码片段)

...参数初始化方法内置方法和属性01.dir内置函数(知道)在Python中对象几乎是无所不在的,我们之前学习的变量、数据、函数都是对象在Python中可以使用以下两个方法验证:在标识符/数据后输入一个.,然后按下TAB键,iPython会提示... 查看详情

面向对象基础(代码片段)

...内容开始------------01. dir 内置函数(知道)在 Python 中 对象几乎是无所不在的,我们之前学习的 变量、数据、函数 都是对象在 Python 中可以使用以下两个方法验证:在 标识符 / 数据&n... 查看详情

测开之面向对象进阶篇・《魔术方法》(代码片段)

...对创建的对象进行初始化设置。什么是魔术方法?在python中,像__init__这类双下滑线开头和结尾的方法,统一称之为魔术方法。注意:在我们自己封装方法时,千万不要用双下划线开头或者结尾的方法定义࿰... 查看详情

python面向对象编程第15篇特殊方法之__del__(代码片段)

本篇介绍Python__del__方法的工作原理。del方法简介在Python中,垃圾回收器可以自动管理内存,它会销毁未被引用的对象。如果对象实现了__del__方法,Python会在垃圾回收器销毁对象的之前调用该函数。但是,何时销... 查看详情

python面向对象编程第15篇特殊方法之__del__(代码片段)

本篇介绍Python__del__方法的工作原理。del方法简介在Python中,垃圾回收器可以自动管理内存,它会销毁未被引用的对象。如果对象实现了__del__方法,Python会在垃圾回收器销毁对象的之前调用该函数。但是,何时销... 查看详情

python面向对象初级篇(代码片段)

文章参考:Python面向对象(初级篇)python面向对象(进阶篇)Python是一门面向对象的语言。本文是面向对象编程的初级篇,仅介绍封装,不涉及继承和多态。鉴于C++也是一门面向对象的语言,... 查看详情

python面向对象初级篇(代码片段)

文章参考:Python面向对象(初级篇)python面向对象(进阶篇)Python是一门面向对象的语言。本文是面向对象编程的初级篇,仅介绍封装,不涉及继承和多态。鉴于C++也是一门面向对象的语言,... 查看详情

python基础:面向对象-继承和多态(代码片段)

一、继承Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性的方法。作用:可以减少代码重复,提升代码复用率。简单示例如下:#父类AclassAnimal(object):s=\'aaa\'def__init__(self,name):self.name=namedefeat(sel... 查看详情