python面向对象

类class关键字

复制代码
class 类名:
    def 方法名(self,参数1,参数2,...):
        pass
python 复制代码
class Cat:
    def eat(self):
        print("猫吃饭")
    def drink(self):
        print("猫喝水")

对象

实例:通过类创建出来的对象叫做类的实例

实例化:创建对象的动作叫做实例化

python 复制代码
class Cat:
    def eat(self):
        print("猫吃饭")

    def drink(self):
        print("猫喝水")


c = Cat()  # 根据类创建对象c
c.eat()
c.drink()

self参数和属性

python 复制代码
class Cat:
    def set_name(self):
        self.name = "tom"

    def eat(self):
        print("%s吃饭" % self.name)

    def drink(self):
        print("%s喝水" % self.name)


c = Cat()  # 根据类创建对象c
c.set_name()
c.eat()
c.drink()
c.name = "张三"
c.eat()
c.drink()

init方法

python 复制代码
class Cat:
    def __init__(self):
        print("cat被创建了")


c = Cat()  # 实例化对象的时候,init方法会被自动调用
python 复制代码
class Cat:
    def __init__(self,name="tom"):
        self.name = name

    def eat(self):
        print("%s吃饭" % self.name)

    def drink(self):
        print("%s喝水" % self.name)


c = Cat("jessica")  # 根据类创建对象c
c.eat()
c.drink()

为了避免实例化的时候必须提供实参,init的形参总是有缺省值

del方法

当对象在内存中销毁的时候,自动调用del方法

del方法只有一个参数self

不要理解成调用del是把对象从内存中删除了

对象即使没有del,同样会被销毁

当对象从内存中销毁的时候,有机会能执行一些代码

python 复制代码
class Cat:
    def __init__(self, name="tom"):
        self.name = name

    def show_name(self):
        print(self.name)

    def __del__(self):
        print("%s销毁了" % self.name)


c = Cat()
c.show_name()

如果对象是局部的,那么函数执行完毕,自动调用del方法

如果对象是全局的,那么程序执行完毕,自动调用del方法

设计

python 复制代码
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        return self.name

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

    def get_age(self):
        return self.age

    def set_age(self, age):
        self.age = age

    def show_name(self):
        print(self.name)

    def show_age(self):
        print(self.age)


d = Dog("汤姆", 18)    # 实例化的时候设置属性的值
d.show_name()    # 汤姆
d.set_name("加菲猫")    # 实例化以后设置属性的值
d.show_name()    # 加菲猫 

str方法

python 复制代码
class demo:
    def __init__(self,name="demo"):
        self.name=name

    def __str__(self):
        return self.name
d=demo()
print(d)

继承

封装:将属性和方法封装到类内部,只能在内部使用,不能在类的外部使用

继承:实现代码的重用,相同的代码不需要重复编写

多态:不同对象调用父类相同的方法,产生不同的执行结果,增加灵活度

python 复制代码
class Animal:
    def sleep(self):
        print("睡")

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


class Dog(Animal):
    def run(self):
        print("跑")


d = Dog()
d.sleep()
d.eat()
d.run()

扩展父类方法(super())

python 复制代码
class Animal:
    def sleep(self):
        print("睡")

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


class Dog(Animal):
    def run(self):
        print("跑")

    def eat(self):
        super().eat()
        print("吃肉")


d = Dog()
d.sleep()
d.eat()
d.run()

封装

把属性和方法前面加上两个下划线__,这个属性和方法就成为了类的内部属性和方法

多态

类属性(定义在类里面,方法外面)

python 复制代码
class dog:
    name = "二哈"

    def __init__(self):
        pass


print(dog.name)
dog.name = "狼狗"
print(dog.name)

类方法

python 复制代码
class dog:
    name = "二哈"

    @classmethod
    def set_name(cls, name):
        cls.name = name  # 通过类方法的形参修改类属性name值

    def __init__(self):
        self.age=20    #类方法无法访问普通属性age

    def demo(self):
        print("普通方法")# 类方法无法访问普通方法demo


print(dog.name)
dog.name="比熊"
print(dog.name)
dog.set_name("涛涛")
print(dog.name)

普通方法使用类属性和类方法

python 复制代码
class dog:
    name = "小白"

    @classmethod
    def get_name(cls):
        return cls.name

    def demo(self):
        dog.name = "小小白"
        print(dog.get_name())


d = dog()
d.demo()

统计实例化的次数

python 复制代码
class dog:
    index = 0;

    @classmethod
    def count(cls):
        return cls.index

    def __init__(self):
        dog.index += 1;


d1 = dog()
d2 = dog()
d3 = dog()
d4 = dog()
print(dog.count())    # 4

静态方法(跟类没有关系)

静态方法不能访问类中其他成员

python 复制代码
class dog:
    @staticmethod
    def help():
        print("帮助")

dog.help()
相关推荐
七颗糖很甜9 分钟前
“十五五”气象发展规划:聚焦五大核心任务
大数据·python·算法
爱码小白18 分钟前
Python 异常处理 完整学习笔记
开发语言·python
c++之路33 分钟前
C++20概述
java·开发语言·c++20
芝士就是力量啊 ೄ೨1 小时前
Python如何编写一个简单的类
开发语言·python
胖虎喜欢静香1 小时前
从零到一快速实现 Mini DeepResearch
人工智能·python·开源
逻辑驱动的ken1 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
MoonBit月兔1 小时前
「Why MoonBit 」第一期——Singularity Note AI 学习助手
开发语言·人工智能·moonbit
qq_392690661 小时前
Redis怎样应对Redis集群整体宕机带来的雪崩
jvm·数据库·python
木木_王1 小时前
嵌入式Linux学习 | 数据结构 (Day05) 栈与队列详解(原理 + C 语言实现 + 实战实验 + 易错点剖析)
linux·c语言·开发语言·数据结构·笔记·学习
Muyuan19981 小时前
22.让 RAG Agent 更像真实产品:聊天页面优化、PDF 上传、知识库重建与检索片段展示
python·django·pdf·fastapi