python之面向对象

Python的面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件和编写代码。在面向对象编程中,可以创建包含数据和功能的类,然后通过类的实例化来创建对象。这些对象可以交互,以完成更复杂的任务。

以下是面向对象编程的一些关键概念:

1. 类(Class):

类是创建对象的模板或蓝图。它定义了对象将会有的属性(数据)和方法(函数)。

2. 对象(Object):

对象是基于类创建的实例。每个对象都有自己的状态和行为。


3. 属性(Attribute):

属性是对象的特征,比如颜色、大小等。在Python中,属性通常是变量。


4. 方法(Method):

方法是对象可以执行的操作,类似于传统编程中的函数。在Python中,方法就是绑定在对象上的函数。


5. 封装(Encapsulation):

封装是指将数据(属性)和操作数据的函数(方法)绑定在一起,形成一个整体即对象。


6. 继承(Inheritance):

继承允许新创建的类(子类)继承父类的属性和方法。这有助于代码重用和扩展性。


7. 多态(Polymorphism):

多态是指不同类的对象可以通过相同的接口进行操作,具体被调用的方法取决于对象的实际类型。

在Python中使用面向对象编程的基本步骤包括:

1. 定义类:使用`class`关键字定义一个类。


2. 添加属性:在类中定义变量来添加属性。


3. 添加方法:在类中定义函数来添加方法。


4. 访问权限控制:使用不同的访问修饰符(如`public`, `private`, `protected`)来控制属性和方法的访问权限。

总的来说,面向对象编程提供了一种组织和管理复杂程序的有效方式,使得代码更加模块化,易于理解和维护。通过类的继承和组合,可以构建出强大的程序结构。

python面向对象的三大特征

Python面向对象的三大特征是封装、继承和多态。

首先,封装指的是将数据(属性)和操作数据的函数(方法)绑定在一起,形成一个整体即对象。这样可以隐藏对象的内部细节,只暴露出需要的接口。在Python中,通过定义类来实现封装,类中的属性和方法可以被设置为私有的,从而限制外部直接访问。

其次,**继承**是一种机制,允许新创建的类(子类)继承父类的属性和方法。这有助于代码重用和扩展性,因为子类可以在父类的基础上添加新的属性或覆盖父类的方法。

最后,**多态**是指不同类的对象可以通过相同的接口进行操作,具体被调用的方法取决于对象的实际类型。这使得程序具有更好的灵活性和可扩展性,因为可以传递任何实现了特定接口的对象,而不必担心它们的具体类型。

综上所述,封装、继承和多态是面向对象编程的核心概念,它们共同构成了面向对象编程的基础。

接下来,上代码

1.面向对象的介绍

# 定义类
class Person:
    # 属性:一般用来描述静态的信息
    name = "张三"
    sex = "男"

    # 方法一般用来实现具体的功能,一般都是直接使用函数定义即可
    def ect(self):  # self表示本身的意思
        print("我是吃饭的方法")

    def say(self):
        print("我是说话的意思")


# 如何通过类得到具体的对象
ji = Person()
# 通过对象访问访问类中的属性
print(ji.name)
print(ji.sex)
# 通过对象调用类中的方法
ji.ect()
ji.say()

2.面向对象中的self介绍

class Student:
    def eat(self):
        print(self)


stu = Student()
stu.eat()  # 这个时候self表示的是stu这个对象
stu1 = Student()
stu1.eat()  # 这个时候self表示的是stu这个对象
# 综上所述:self描述的是当前这个对象

3.构造函数和析构函数

# 魔术方法是一些比较特殊的方法
# 特点:
"""
1.不需要手动调用,会在合适的时机自动触发
2.这些方法都是以__开始和使用__结束的
3.方法名都是系统规划好的
"""


class Person():
    """
    # 类属性(不推荐这样写)
    name = "张三"
    sex = "男"
    """

    # 构造函数:当创建了对象之后,给对象赋值属性的时候自动触发
    def __init__(self, name, sex):
        self.name = name
        self.sex = sex
        print("我的触发时机是:当你给对象赋值的时候自动触发")
        print(self.name,self.sex)

    def __del__(self):
        print("我的触发条件是:当对象被销毁的时候")


dong = Person("张三", "男")
print("hello word")
"""
构造函数:主要用于数据库的连接时
析构函数:主要用于数据库的关闭或者文件的保存等等
"""

4.类属性和对象属性

class Stuent():
    # 类属性
    name = "鱼类"

    # 构造函数 对象属性
    def __init__(self, wen):
        self.wen = wen

    def swin(self):
        print("游泳的方法")


# 创建对象
jingyu = Stuent(123)
liyu = Stuent(3567)

# 访问类属性  (对象和类都可以访问类属性)
# print(jingyu.name)  # 鱼类
# print(liyu.name)  # 鱼类
# print(Stuent.name)  # 鱼类
# 访问对象的属性
print(jingyu.wen)   # 123
print(liyu.wen)   # 3567
# print(Stuent.wen)   # 报错
# 总结如下:
"""
对象可以访问对象的属性,但是类不能访问对象的属性
"""
"""
总结:
    1.类属性可以使用类名访问(推荐)对象也可以访问类属性(不推荐)
    2.对象的属性可以使用对象访问(推荐)类不可以访问对象的属性(不推荐)   
"""
# 修改类属性
Stuent.name = "鲨鱼"
print(Stuent.name)
jingyu.name = "鳄鱼"
print(jingyu.name)
print(liyu.name)  # 其他对象访问类属性的时候,还是原来的结果
# 通过对象修改类属性的时候,只是动态的给当前对象添加了一个属性,并不能修改类属性
# 修改对象的属性
jingyu.wen = "哈哈"
Stuent.wen = "14"
print(Stuent.wen)
print(jingyu.wen)
"""
总结如下:
    1.类可以修改类的属性(推荐) 对象修改类的属性的时候,只是动态的给当前对象添加了一个属性,并没有修改类的属性,其他对象访问类属性时还是原来的值
    2.对象可以修改对象的属性(推荐) 类也可以修改对象的属性
"""

5.继承

# 面向对象的三大特征:继承,封装,多态
"""
1.封装
    函数的定义,类的定义,里面包含了属性和方法
2.继承:
    将一些公共的属性和方法提取出来,放到一个专门的父类中去,其他的子类去继承这个父类后,就可以直接使用这个父类的一些属性和方法了
3.多态
    更多的体现在解决一些特殊问题的时候的技巧
"""


class pen():
    def saty(self):
        print("说话的方法")


class ceat(pen):  # 在子类中继承父类只需要在定义子类的时候,参数列表上写上父类的名称即可
    def add(self):
        print("吃饭的方法")


# 创建一个对象
xiaoming = ceat()


# xiaoming.add()  # 对象直接调用子类的方法
# xiaoming.saty()  # 对象直接调用父类的方法
# 有构造函数的继承
class num():
    def __init__(self, name, sex):
        self.name = name
        self.sex = sex

    def shoe(self):
        print("我是跑的方法")


class Dog(num):
    def __init__(self, name, sex, weight):  # 先在子类的构造函数中继承父类的属性,然后在重构
        # 1.继承父类的构造方法
        # num.__init__(self, name, sex)
        # 2.隐士继承父类的构造函数
        super(Dog, self).__init__(name,sex)
        # 定义子类自己的属性
        self.weight = weight

    def wang(self):
        print("旺旺")


# 定义一个对象
taidi = Dog("泰迪", "公", 5000)
taidi.shoe()
print(taidi.name)
print(taidi.sex)

6.继承的注意事项

# 定义一个类
class pen():
    def __init__(self, name):
        self.name = name

    def show(self):
        print("跑步的方法")


"""
注意:
    1.object是所有类的父类,如果一个类没有显示指明他的父类,则默认是object(可以省略不写)
    2.Python中的面向对象是可以实现多继承的
"""
# 注意:
demo = pen("张三")
# demo.show()
# print(demo.name)
# 多继承语法
"""
class 子类类名(父类1,父类2,父类3):
    属性
    方法
"""


# 定义一个父类
class fun():
    def __init__(self, name):
        self.name = name

    def show(self):
        print("钱不好挣")


# 定义一个母亲类
class muther():
    def __init__(self, her):
        self.her = her

    def eat(self):
        print("一言不合就干饭!")


# 定义一个子类
class son(fun, muther):  # 子类继承多个父类的时候,只需要把父类的名字写在参数列表中就行,中间使用逗号隔开
    def __init__(self, her, name, ser):
        # 继承父类的构造函数
        fun.__init__(self, name)
        muther.__init__(self, her)
        # 定义子类的属性
        self.ser = ser
    def play(self):
        print("打游戏")
san = son("李四",178,130)
print(san.name)
print(san.her)
print(san.ser)
san.show()

7.类方法和静态方法

# 类方法:使用@classmethod装饰器修饰的方法叫做类方法,可以通过类名调用,也可以通过调用,一般情况下使用类名调用
class aimint():
    # 类属性
    name = "动物类"

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

    @classmethod
    def from_str(cls):
        print("我是类方法")
        print(cls)
        print(cls == aimint)  # cls表示的是当前类
        print(cls.name)

    @staticmethod
    def eat():
        print("我是静态方法")


# aimint.from_str()  # 通过类名调用类方法
dog = aimint("土狗")
# dog.from_str()  # 对象调用类方法
aimint.eat()  # 通过类名调用静态方法
dog.eat()  # 通过对象调用静态方法
"""
总结:
    类方法
        1.通过@classmethod装饰器修饰的方法叫做类方法
        2.类方法可以使用类名调用(推荐) 对象也可以调用类方法
        3.没有self,在类方法中不可以使用其他对象的属性和方法(包括私有属性和方法)
        4.可以调用类属性和其他的类方法
        5.类方法中的cls是class的简写,可以更换为其他的,一般使用cls表示当前类
        6.cls表示当前类
    静态方法:
        1.通过@staticmethod装饰器的方法叫做静态方法
        2.通过类名调用静态方法(推荐)  对象也可以调用
        3.静态方法中的形参没有cls,在静态方法中不建议使用(类属性\类方法\静态方法)
        4.静态方法一般是一个单独的方法,只写在类中
"""

8.私有属性和私有方法

class git():
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        # 私有属性的设置
        # 比如女孩的年龄是私密的,不能任意地访问,可以设置为私有的
        self.__age = age

    # 私有方法:__方法名
    def __getname(self):
        print("一亲定终身")  # 只可以在类的内部可以访问

    def sat(self):
        print("说话的方法")
    def swh(self,gx):
        if gx == "情侣":
            self.__getname()
        else:
            print("我不是你的情侣,你不可以调用我")
    # 在类的内部定义一个方法,可以访问私有属性
    def unm(self, body):
        if body == "小明":
            print(f"{self.name}偷偷的告诉你{body}说,我今年{self.__age}岁了")
        else:
            print("我不和你说")


hon = git("小红", "女", 14)
print(hon.name)  # 小红
print(hon.sex)  # 女
# print(hon.age)  # 报错
# 在类的外部不可以直接访问对象的私有属性
hon.unm("小明")
# hon.__getname()
hon.swh("情侣")
'''
总结:
私有属性:
    1.格式:在属性的前面加 __比如__age 
    2.用法:只可以在类的内部访问,在类的外部是访问不了的,可以在类的内部设置一个对外开放的接口,(这个接口一般都会设置各种条件和各种判断,满足后才可以访问),主要用于各种私密的信息
私有方法:
    1.格式:在方法的前面加__比如:__age()
    2.用法:只能在类的内部访问不能在类的外部访问,私有方法一般用于类的内部实现某一些功能,对于外部来说没有实际的意义
'''

9.多态

# 多态:一种事物的多种体现形式,函数的重写就是多态的一种体现形式
# 在面向对象中的多态,指的是父类的引用指向子类的对象
class stu():
    def eat(self):
        print("我是吃饭的方法")


# 子类
class fish(stu):
    def eat(self):
        print("大鱼吃小鱼,小鱼吃虾米")


class don(stu):
    def eat(self):
        print("狼行千里吃肉,狗行千里吃粑")


class mao(stu):
    def eat(self):
        print("猫爱吃鱼")

# 严格意义上的多态
class jiu():
    def ete(self,amin):
        amin.eat()
# 最简单的多态
"""
在父类和子类中出现了函数重名的情况,会调用子类的函数,子类和父类重名的情况就叫做重载或者重写
不同的子类调用和父类方法名一样的方法,调用都是自己的方法,这就是多态的一种体现
"""
fch = fish()
d = don()
m = mao()
m.eat()
d.eat()
fch.eat()
# 严格意义上的多态的体现
jiu().ete(d)
jiu().ete(m)

 10.单例模式

# 什么是设计模式
""""
经过多次的实验,总结出一些特殊的解决方案
常见的设计模式有23种,比如:单例设计模式/工厂模式/门面设计模式/代理模式/装饰设计模式等等
"""
# 单例设计模式
"""
单例:单个实例对象,在程序运行的过程中,确保某一个类只能有一个实例[对象],不管在哪个模块中获取对象,获取到的都是同一个对象
"""


# 应用场景:数据库的连接操作
# 单例设计模式的实现
class Solution:
    def __init__(self, name):
        self.name = name

    # 创建一个类属性
    instead = None

    @classmethod
    def __new__(cls, *args, **kwargs):
        print("__new__")
        # 如果类属性的instead == None表示,改类未创建对象
        if cls.instead is None:
            cls.instead = super().__new__(cls)
        return cls.instead


p1 = Solution("张三")
p2 = Solution("李四")
p3 = Solution("王五")
print(p1 == p2 == p3)

**Python的文件操作主要包括打开文件、读写文件内容以及关闭文件等步骤**。

首先,**打开文件**是进行文件操作的第一步。在Python中,可以使用`open()`函数来打开一个文件,这个函数接受文件名和模式作为参数。例如,使用`'r'`模式可以以只读方式打开文件,而使用`'w'`模式则可以打开文件进行写入。如果文件不存在,使用`'w'`模式会创建一个新文件。

接下来,**读取文件内容**可以通过多种方式进行。如果想要读取整个文件的内容,可以使用文件对象的`read()`方法。如果只需要读取部分内容,可以使用`readline()`或`readlines()`方法来逐行读取。此外,还可以使用`for`循环直接迭代文件对象,这样可以逐行访问文件内容。

然后,**写入文件内容**也是文件操作的一个重要部分。使用`write()`方法可以将字符串写入文件。如果是要写入多行内容,可以在每行末尾添加换行符`'
'`。当完成文件的写操作后,通常需要调用`flush()`方法来确保所有的写入操作都已经被执行。

最后,不要忘记**关闭文件**。在完成文件操作后,应该使用`close()`方法关闭文件,以释放系统资源。也可以使用`with`语句来自动管理文件的打开和关闭,这是一种更加安全的做法。

除了上述基本操作,Python还支持更高阶的文件操作,如文件夹的递归访问和Excel文件的读取与写入等。此外,`seek()`函数可以用来改变文件指针的位置,从而实现随机访问文件中的数据。

总的来说,Python提供了丰富的文件操作功能,可以满足不同场景下对文件处理的需求。在进行文件操作时,应该注意选择合适的模式和正确的方法,以确保数据的安全和操作的正确性。

11.文件的打开和关闭

# open()用于打开文件
""""
参数介绍:
第一个参数:file表示文件的路径
第二个参数:mode 表示打开文件时的模式  默认的模式是r (r表示read 读   w 表示write  写   a表示 append  追加内容)
第三个参数:encoding   表示编码格式
返回值:
    打开后的文件对象
"""
file = open("demo.txt", encoding="utf-8")
# print(type(file))
"""
在Windows系统中,打开文件模式是以gbk的方式打开文件demo.txt文件中写入的内容的时候,是以utf-8的格式写入的内容
解决方案:读取文件和写入文件要以相同的编码格式
"""
# read()读取文件中的内容
print(file.read())

# 文件的内容读取后,要关闭文件
file.close()

12.文件的操作

# open()
"""
路径分为两种:
    1.绝对路径
    2.相对路径
"""
file = open("./demo.txt", encoding="utf-8")  # 打开文件
print(file.read())  # 读取文件中的内容
file.close()  # 关闭文件

13.写入文件

# open()打开指定的文件
file = open("fhj.txt", "w", encoding="utf-8")
"""
注意:
    1.如果打开的文件路径不存在,则会直接创建一个新文件
    2.mode = "w"会把原文件的内容直接替换掉
    3.mode="a"会以追加的方式向文件中写入内容,不会影响原文件的内容
"""
# write()
# flush()刷新管道
file.flush()
file.write("你好啊,朋友")

创作不易,请各位美女点个赞在走呗,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值