14面向对象

科技资讯 投稿 8900 0 评论

14面向对象

面向对象

面向对象编程介绍

需要注意的是,与之对应的是面向过程编程思想。实际上,能够使用面向对象编程思想实现的程序,也都能通过面向过程完成。只是看哪种思想更适合当前开发需求。

面向过程与面向对象区别

面向过程:根据业务逻辑从上到下写代码  
面向对象:将数据与函数绑定到一起,进行封装。减少重复代码的重写过程

类和对象

    类:具有同一特征的事物,是抽象的,不是真实存在的。用来描述具有相同属性和方法的对象的集合。
  • 对象:某一个具体事物的存在,在现实世界中可以是看得见摸得着的。

类的构成

类由3个部分构成

    类的名称:类名
  • 类的属性:一组数据
  • 类的方法:允许对类进行操作的方法

# 类的定义
class 类名称:
    类的属性(成员变量
    
    类的行为(成员方法

创建对象

python中,可以根据已经定义的类去创建出一个个对象
创建对象的格式为:

# 创建类对象的语法
对象 = 类名称(

类与对象的使用

# 定义
class 类名:
    def 方法名(self,参数:  # 类中函数:称为方法
        pass
        
# 执行
s = 类名(         # 创建对象(实例 这个过程就是实例化
s.方法名(参数     # 调用类中方法

self参数

在类当中定义方法时,会发现系统帮我们自动创建了self参数,并且在调用对象的该方法时,也无需传入self参数。

    self本身是形参
  • self就是当前对象本身
class Student:
    def printinfo(self:
        print(lisi.name, lisi.age
        print(self.name, self.age   # 这里会高亮,对象的属性是暴露在外面的
        print(lisi
        print(self

lisi = Student(  # 对象
# 对象的属性是暴露在外面的
lisi.name = '李四'
lisi.age = 38

lisi.printinfo(
"""
李四 38
李四 38
<__main__.Student object at 0x000002E5A099B208>
<__main__.Student object at 0x000002E5A099B208>

说明在类中printinfo(方法中,lisi和self是等价的
"""

魔法方法

在Python的类中,以两个下划线开头、两个下划线结尾的方法,如常见的 :__init__()、__str__(、__del__(等,就被称为「魔术方法」(Magic methods)。之所以会叫魔法方法原因是这些方法都是到达某个条件自动触发,无需调用,如果希望根据自己的程序定制特殊功能的类,那么就需要对这些方法进行重写。使用这些「魔法方法」,我们可以非常方便地给类添加特殊的功能。

__init__(

_init_( :初始化对象

class My_Phone(:
    def __init__(self:
        self.width = 10
        self.heigth = 15

    def main(self:
        print(self.width
        print(self.heigth

apple = My_Phone(

_init_( ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤
_init_(self 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去。

    带参数的init

class My_Phone(:
    def __init__(self,width,heigth:
        self.width = width
        self.heigth = heigth

    def apple_phont(self:
        print("苹果手机的宽为:",self.width
        print("苹果手机的高为:",self.heigth

    def huawei_phont(self:
        print("华为手机的宽为:",self.width
        print("华为手机的高为:",self.heigth

apple = My_Phone(10,20
apple.apple_phont(

_str_(

当使⽤print输出对象的时候,默认打印对象的内存地址。如果类定义了 str ⽅法,那么就会打印在这个⽅法中 return 的数据。
_str_(:解释类的属性或作用

class Demo(:
    def __init__(self, width, heigth:
        self.width = width
        self.heigth = heigth

    def __str__(self:
        return f"你这个手机的宽是{self.width},高度是{self.heigth}"

a = Demo(10,20
print(a  # 你这个手机的宽是10,高度是20
# 若没有__str__(方法,则会打印对象的内存地址:<__main__.Demo object at 0x000001E6FC7A7198>

_del_(

当删除对象时,python解释器也会默认调⽤ __del__( ⽅法。在对象销毁的时候被调用,当对象不再被使用时,del(方法运行:

class Demo(:
    def __init__(self, width, heigth:
        self.width = width
        self.heigth = heigth

    def __del__(self:
        print("对象已经删除"

a = Demo(10,20

# __del__方法
class Demo:
    def __del__(self:  # 当由该类创建的实例对象,被删除或者说在内存中被释放,将会自动触发执行。
        print("被释放了!"


d = Demo(
print("*" * 20
# del d  # 相当于提前执行了del方法
print("*" * 20

类属性与方法

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问

class Demo(:
    __num = 0  # 私有属性
    result = 0  # 公开属性

    def count(self:
        self.__num += 1
        self.result += 1
        print(self.__num

    def getnum(self:
        return self.__num

run = Demo(
run.count(
print(run.result
# print(run.__num    # 报错,实例不能访问私有变量
__num = run.getnum(
print(__num

类的私有方法

class func:
    def fun1(self:
        print("1"

    def __fun2(self:
        print("2"

    def fun3(self:
        return (self.__fun2(

f = func(

f.fun1(
# f.__fun2(
f.fun3(

# 强行调用类的私有方法
# 对象._类名__私有属性
print(f._func__fun2  # 不建议使用

python中没有真正意义上的私有

实例属性

# 实例属性
class Province:
    def __init__(self, country, province:
        self.country = country
        self.province = province

    def print_info(self:
        print(self.country, self.province  # 通过self去访问  这个要方便很多
        print(zs.country, zs.province   # 通过每个对象去访问


zs = Province("中国", "湖南"
zs.print_info(

ls = Province("中国", "湖北"
ls.print_info(

实例方法

class Demo:
    def __init__(self:
        self.name = "张三"

    # 实例方法  
    def fun1(self:
        print(self.name

a = Demo(
a.fun1(

编程笔记 » 14面向对象

赞同 (44) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽