python面向对象--类与对象

一、类与对象概念

1.面向对象的两个重要概念

1)类:共性事物的抽象,是对某一类具有共性事物的描述,是概念上的定义。

2)对象:是共性事物的一个体现,是这类事物的每个个体,或者说是类的一个实例

总结:类是对象的模板,对象是类的实例

2.类结构:里面包含属性和函数

3.数据是对象的状态-->成员变量(属性)

方法是对象的行为-->函数(方法)

二、类的语法

class Math:

a = 4  #属性

b = 5

def add(self): #方法

    c = self.a + self.b

    return c

注意:

1)类名首字母大写比如 class User # class是关键字

2)类里面包含属性与方法

3)类函数自带self关键字,不能少

4)如果类函数里面调用属性,方法:self.属性名

案例:

#定义类
class Person:

    #定义属性
    height = None
    weight = 50
    age = 28
    money = 2000000

    #内部定义属性值
    def setAge(self,age):
        print("默认的年龄为:",self.age)
        self.age = age  #重新赋值

    #定义方法,self代表Person这个类本身,必须有。self可以调用属性
    def cooking(self,flag):
        if flag is True:
            print("会做饭。。。。")
        else:
            print("不会做饭。。。。")

    def moneying(self):
        print("收入很可观。。。")

#实例化对象:类名()
person_1 = Person()
#改变对象的属性
person_1.setAge(26)
person_1.cooking(False)
print(person_1.age,person_1.money,person_1.height)

三、类的初始化

语法:def __ini__(self):

pass

#定义类
class Person:

    def __init__(self,height,weight,age,money=2000000):
        #定义属性,不需要再外部单独声明
        self.height = height
        self.weight = weight
        self.age = age
        self.money = money

    #定义方法,self代表Person这个类本身,必须有。self可以调用属性
    def cooking(self,flag):
        if flag is True:
            print("会做饭。。。。")
        else:
            print("不会做饭。。。。")

    def moneying(self):
        print("收入很可观。。。")

#实例化对象:类名()
person_1 = Person(178,58,24)
person_1.cooking(False)
print(person_1.age,person_1.money,person_1.height)

四、类的封装

1.实现方式:遵循一定的属性和方法命名规约。不希望这些变量或者方法被外部使用

2.任何以单下划线_开头的名字都应该是内部实现。即不希望通过实例名称.变量名/方法名来调用。但python并不会真的阻止别人访问内部名称,只是一种约定。

3.以双线划线__开头的名字,仅类自己可访问。继承--这种属性通过继承是无法被覆盖的。其实也是可以访问的,只不过换成了__类名__变量名/函数名

4.两种不同的编码约定(单下划线和双下划线)来命名私有属性

对于大多数而言,非公共名称以单下划线开头,但是,如果清楚代码会涉及到子类,并且有些内部属性应该在子类中隐藏起来,才考虑使用双下划线。

class MyClass:

    def __init__(self):
        #定义私有变量
        self.__private_data = "私有方式一"#子类也可以使用
        self._private_data = "私有方式二" #仅限于自己类内部用

    def _pri_add(self):
        print("私有方式——单下划线")

    #定义私有方法
    def __pri_func(self):
        print("私有方式--双下划线")

    #定义公共类
    def public_func(self):
        print("公共行为")
        #类内部可以访问自己的私有变量、私有方法
        self.__pri_func()

#定义子类,继承MyClassclass On(MyClass):

    def public_jicheng(self):        print("aaaa")

mc = MyClass()mc.public_func()so = On()so._pri_add()   ---子类可以直接调用

五、类的继承,支持多继承

1)语法:class 子类类名(父类类名)

2)子类拥有父类的所有属性和方法

3)子类可以扩展自己的属性和方法

4)父类的行为不够用,子类要升级和优化,子类可重写父类的方法--多态

5)子类和父类都有的行为:子类实例优先使用自己的,没有再去用父类的

6)继承父类的属性、方法--单继承

class Father:

    def __init__(self,id,name,sex,age):
        self.id = id
        self.name = name
        self.sex = sex
        self.age = age

    def eat(self,food):
        print("吃",food)

    def earnmoney(self,money):
        print("挣钱",money)

#继承父类
class Son(Father):

    def dance(self):
        print("跳舞")

huahua = Son(2,"花花","男",23)
huahua.eat("香蕉")

7)多继承--继承的不同父类之间的方法是不一样的。多继承注意继承顺序。

1*。多继承语法:class 子类类名(父类1,父类2)

2*。多级承中,如果继承的父类中都有相同的方法,则按照继承的先后顺序进行方法的调用。如下代码中先继承父类,在son调用earnmoney()方法时会调用父类的方法输出“father挣钱 2000”.

class Father:

    def __init__(self,id,name,sex,age):
        self.id = id
        self.name = name
        self.sex = sex
        self.age = age

    def eat(self,food):
        print("吃",food)

    def earnmoney(self,money):
        print("father挣钱",money)

class Mother:

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

    def singing(self,b):
        print("唱歌弹吉他",b)

def earnmoney(self,money):         print("mother挣钱",money)

#继承父类
class Son(Father,Mother):

    def eat(self,food):
        print("吃",food,"但我更喜欢吃肉")

    def dance(self):
        print("跳舞")

huahua = Son(2,"花花","男",23)
huahua.eat("香蕉")
huahua.singing("aaa")

3*。在子类的行为中,想调用父类的行为,然后再做额外扩展,可以使用super类。主要处理多继承当中的问题

语法:super.行为(参数)

六、方法的重写(多态)

1)重写父类的方法、初始化参数。

类名.__ini__()或者super.__ini__()

class Father:

    def __init__(self,id,name,sex,age):
        self.id = id
        self.name = name
        self.sex = sex
        self.age = age

    def eat(self,food):
        print("吃",food)

    def earnmoney(self,money):
        print("挣钱",money)

class Mother:

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

    def singing(self,b):
        print("唱歌弹吉他",b)

#继承父类
class Son(Father,Mother):

    def __init__(self,cls,id,name,sex,age,b):
        Father.__init__(self,id,name,sex,age)
        Mother.__init__(self,b)
        self.cls = cls
    def eat(self,food):
        print("吃",food,"但我更喜欢吃肉")

    def dance(self):
        print("跳舞")

huahua = Son("2班",2,"男","花花",23,"bbbb")
huahua.eat("香蕉")

七、实例

编写一个类:实现对文件的读、写、追加操作。要求有初始化函数。
实例化这个类,对你本地的某一个文件进行读、写、追加操作。
ps:与第三方资源交互,添加异常处理。  ---注意文件的存在与否的判断

import os
class FileOperate:

    #初始化
    def __init__(self,filePath):
        file_dir = os.path.dirname(filePath)
        #如果文件目录不存在,则创建它。也可以不创建,直接抛出异常都okay.
        if not os.path.exists(file_dir):
            os.makedirs(file_dir)
        self.file_path = filePath

    #读数据 - 从文件中读取
    def read_all(self):
        #如果文件存在则读取数据
        if os.path.exists(self.file_path) and os.path.isfile(self.file_path):
            with open(self.file_path,encoding="utf-8") as fs:
                return fs.read()
        else:
            print("!!!文件不存在,无法读取数据。请确保文件存在的情况下再读取!!")

    #写数据或者追加 - 直接覆盖
    def write_data(self,content):
        # 写数据时文件可以不存在。在初始化中已确保路径是存在的。
        with open(self.file_path,"w",encoding="utf-8") as fs:
            fs.write(content)

    #追加数据 - 在原来的基础上
    def add_data(self,content):
        #追加数据时文件可以不存在。在初始化中已确保路径是存在的。
        with open(self.file_path,"a",encoding="utf-8") as fs:
            fs.write(content)

fo = FileOperate("D:\\类和对象\\file_operate.txt")
print(fo.read_all())
fo.write_data("我写入数据啦---第一行数据--仅作测试\n")
fo.add_data("我是追加的数据哟哟哟!!\n")

原文地址:https://www.cnblogs.com/xiaoxiaolvdou/p/9501826.html

时间: 2024-10-17 23:37:21

python面向对象--类与对象的相关文章

python面向对象——类和对象

一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程(流水线式) 优点:极大的降低了程序的复杂度 缺点:应用场景固定住了,可扩展性差 2.函数式编程 特点: a.不修改外部传来值的状态 b.精简,可读性差 c.模仿数学里的函数 3.面向对象编程(是用来解决程序的可扩展性的) 优点:解决了程序的可扩展性 缺点:可控性差 二.面向对象设计与面向对象编程 1.面向对象设计 面向对象设计(Object oriented design):将一类具体事物的数据和动作整

Python的类和对象 入门级讲解(简单粗暴)

前言:本人是Python初学者.在学到Python的类和对象的时候,被'高深'的概念虐得死去活来.上网提问,得到的回复几乎都是'大神们'藏着掖着迫不得已才挤出来的只言片语:上网搜文章,长长的篇幅,那些字都认得,但是就是不知道是什么意思,并且都是反复地复制粘贴而导致文章排版极其辣眼睛. 一个阴郁的冬天,我在YouTube上搜到一个视频作者John Philip Jones,发现一个关于Python类和对象的讲解.这是目前为止我看到的最利于小白学习Python的讲解方法.由于在国内上YouTube不

Java面向对象-类与对象

Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建和使用 看下面实例 我们在com.java1234.chap03.sec01包下新建一个Person类 1 package com.java1234.chap03.sec01; 2 3 /** 4 * Person类 文件名和类名必须一致 5 * @author user 6 * 7 */ 8 pu

C#编程语言与面向对象——类与对象

由于ASP.NET技术是全面向对象的,因此,要掌握这一技术,必须具备有扎实的面向对象理论基础 使用C#编程,所有的程序代码几乎都放在类中,不存在独立于类中之外的函数,因此,类是面向对象编程的基本单元 在绝大多数面向对象语言中,一个类都可以包含两种成员:字段和方法.字段与方法这两个概念是面向对象理论的术语,是通用与各种面向对象语言的.而在各种的具体面向对象语言(比如C#)中,可以简单地理解: 字段及变量,方法及函数. C#编程语言与面向对象--类与对象

python基础(类、对象、包)完整的总结

python基础(类和对象.包)类和对象对象是看的见摸的着的类是模板对象需要类才能创建出来类的构成(三个部分)类的名称:类名类的属性:一组数据类的方法:允许进行操作的方法(行为)class 类名():def添加方法class Cat():def run(self):print("cat is running")xiaobai = Cat()xiaobai.run()xiaobai.name = "小白"xiaobai.age = 40类的属性属性就是变量一个类可以创

python的类和对象——进阶篇

写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多时候我们在想要为自己的青春拼搏一次的时候都输给了偶尔的抵触和轻松愉悦的生活.我们不过和走到最后的人差了两个字——坚持!所以尽管进入类和对象这一部分,大家都会有畏难心理,但是坚持一下下,你就会是那个走到最后的人! 回顾 上一篇中我们初步的认识了类和对象,了结了它们的一些语法,就相当于得到了一个对象的骨

python面向对象类

面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux内核.git.apache服务器等 优点:极大的降低了程序的设计复杂度 缺点:可扩展性差,改动一个地方很可能要改多个地方,牵一发而动全身 面向对象编程:不是编程的全部,只是用来解决软件可扩展性的 核心是对象(上帝式思维),对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.面向对象就是把计算

python基础 类与对象

类与对象的概念 类即类别.种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体. 在现实世界中:肯定是先有对象,再有类 在程序中:务必保证先定义类,后产生对象 在Python中程序中的类用class关键字定义,而在程序中特征用变量标识,技能用函数标识,因而类中最常见的无非是:变量和函数的定义 class Student: school='xxxxx' def learn(self): print('is learning') def eat(se

面向对象——类与对象篇(第一章)

一.什么是面向对象? 想要学习面向对象,就要先知道面向过程. 面向过程 面向过程:面向过程的程序的核心是过程(流水线思维),就是关心解决问题的步骤. 面向过程 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机.嵌入式开发.Linux/Unix等一般采用面向过 程开发,性能是最重要的因素. 缺点:没有面向对象易维护.易复用.易扩展 适用场景: 一旦完成很少改变的场景(著名的Linux内核.git.以及Apache HTTP Server等) 面向对象 面向对象: