• 面对对象编程01


    '''
    面向对象:
    程序 现实中
    对象----------->具体的事物(水杯,电话等)
    现实中的一个事物----->电脑中的程序
    世间万物皆是对象

    好处:
    类似一个函数,但是把事物综合了起来,达到了复用,灵活性更加高了,注重的是一个事物
    面向过程(放大象进冰箱)1.开冰箱 2.放大象 3.关冰箱
    冰箱是一个对象,大象是一个对象。如果其中一个出问题了只需要改其中一个就可以

    面向对象:

    对象
    属性
    方法

    对象:
    小明的手机
    小张的手机
    小赵的手机等....
    这是对象的集合---->提取出一个共性:手机------>作为一个类别出现------>手机类(动作:打电话,发短信,上网,游戏 共性:型号,价格,颜色)
    学生类:
    特征:姓名,年龄,性别,身高,血型,婚否-------->属性
    动作:刷抖音,敲代码,看书,--------->方法
    多个对象提取他们的共同的特征和动作把他给封装到一个类当中
    这就是一个完整的面向对象的一个过程
    接下来定义一个手机类 (先通过对象写类,还是先写类。)----->先出类,先有需求
    '''



    # 所有的类型首字母大写,多个单词使用驼峰式命名
    # 一般都是要继承它的祖先,单纯有特征没有动作不是一个完整的类
    # class 类型[(它的父类)]:
    # 属性:特征
    # 方法:动作


    # class Phone:
    # # brand = '华为'
    # #
    # #
    # # print(Phone) # <class '__main__.Phone'>
    # #
    # # yp = Phone() # 使用类创建对象 在类型后面加()表示创建对象
    # # ff = Phone() # 使用类创建对象
    # # print(yp) # <__main__.Phone object at 0x034500E8>
    # # print(yp.brand) # 华为
    # # yp.brand = 'mac' # 修改yp的brand的属性
    # # print(yp.brand) # mac

    # 定义类和属性
    # class Student():
    # # 类属性
    # name = '小伟'
    # age = '12'
    #
    #
    # # 使用类来创建对象
    # xiaoming = Student()
    # print(xiaoming.age)
    # xiaoming.age = '123' # 这是对象的属性,而且是动态操作,一个赋值操作改变的是xiaoming这个对象里面的东西进行修改
    # # 流程是先找自己空间里面的,然后再找类中寻找
    # Student.age = '155' # 修改类中的属性


    # ------------------------------------------------------------------------------------------------------------
    # 类中的方法:动作
    # 普通方法,类方法,静态方法,魔术方法
    # '''
    # 如何定义个普通方法:
    # def 方法名(self,[],[],[],[参数]):
    # pass
    # '''
    # class Phone():
    # brand = '小米'
    # price = 1999
    # type = 'k20pro'
    # # 类里面的方法
    # def call(self):
    # print('正在打电话')
    # print('请留言', self.note)
    #
    #
    #
    # phone1 = Phone()
    # phone1.note = 'zhzhzhzhzhz'
    # phone1.call() # 这边要注意先后顺序,要先给note赋值


    # 函数和 类里面的定义的:方法
    # def func():
    # print('--->', name)
    #
    # username = 'zzh'
    # func()username

    # def func(names):
    # for name in names:
    # print(name)
    #
    # name = ['aa','bb','cc']
    # func(name)

    # class Phone():
    # def call(self): 是不断发生改变的
    # print('ssss', self.XXX) 这个不能保证每一个都有
    # #使用魔术方法之一: def __init__(self): init初始的
    # pass 可以解决这个问题
    # pass
    #
    # p = Phone()
    # p.call() 这里不用参数是因为把自己的地址作为一个参数直接传入了self

    # ------------------------------------------------------------------------------------
    # class Phone():
    # def __init__(self):
    # self.brand = input('输入你的手机的品牌')
    # self.price = int(input('输入你手机的价格'))
    #
    # def func(self):
    # print('价格是', self.price)
    # print('品牌是', self.brand)
    #
    #
    # p = Phone() # zz
    # p.func() # 价格是 10000 价格是 10000

    '''
    1.找有没有一个空间名字叫phone
    2.利用phone这个类创建一块内存,和phone一模一样的空间 0X1231564AS5D1ASD456这样的
    3.**造完空间了,就回到类(Phone)里面去看,有没有魔术方法,如果没有就执行下面的动作,把开辟的空间给了对象P
    4.如果有__init__,就是进入__init__,执行里面的动作此时的__init__里面的self是0X1231564AS5D1ASD456
    5.最后把0X1231564AS5D1ASD456赋值给对象P
    '''

    # 方法一:class Phone():

    # def __init__(self):
    # self.brand = input('输入你的手机的品牌')
    # self.price = int(input('输入你手机的价格'))

    # 方法二:class Phone():
    # def __init__(self, brand, price):
    # self.brand = brand
    # self.price = price


    # 尝试:
    # def input1():
    # global name, age
    # name = input("输入你的name")
    # age = input('输入你的年龄')
    #
    # class Phone():
    # def __init__(self, name, age):
    # self.name = name
    # self.age = age
    #
    # def print(self):
    # print('00', self.name)
    # print('01', self.age)
    #
    # input1()
    # p1 = Phone(name,age)
    # p1.print() # 可行,这样就有了一个交互的能力
    # ------------------------------------------------------------------------------------

    # 猫
    # class Cat():
    # type = '猫'
    #
    # def __init__(self):
    # self.name = input('输入你的猫的名字')
    # self.age = int(input('输入你的猫的年龄'))
    # self.color = input('输入你的猫的颜色')
    #
    # def food(self):
    # food = input('输入你的猫喜欢吃什么')
    # print('{}喜欢吃{}'.format(self.name, food))
    #
    # def catch_mouse(self, weight, color):
    # print('{}抓了一个{}kg的{}的老鼠'.format(self.name, weight, color))
    #
    # def sleep(self, hour):
    # if hour > 8:
    # print('{}睡了{}小时已经睡够了'.format(self.name, hour))
    # else:
    # print('还没睡够呢')
    #
    # def show(self):
    # print('{}的详细信息'.format(self.name))
    # print('**' * 10)
    # print('{} {} {} {} '.format(self.name, self.age, self.type, self.color))
    #
    #
    # cat1 = Cat()
    # cat1.catch_mouse(18, 'red')
    # cat1.show()
    # cat1.sleep(99)
    # cat1.food()
    # -------------------------------------------------------------------------------------------------
    # 类方法
    '''
    特点:
    1.定义需要依赖装饰器@classmethod
    2.类方法中的参数不是对象了,而是当前类 print(cls) # <class '__main__.Dog'>
    3.类方法中只可以使用类属性,不能使用对象属性
    4.在对象创建之前类方法就能调用,他是class创建完之后就直接有的一个东西
    5.类方法中可否使用它的普通方法(不可以的) 普通方法需要self,也就是说有self的类不能使用

    类方法的作用,只能访问类属性,可以用类方法做一些对象没有生成之前的事情,例如:计时间,进程分布,等
    '''


    class Dog():

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

    def run(self): # 依赖于对象
    print('{}在院子里面跑来跑去'.format(self.nickname))

    @classmethod # 这就是一个类方法。有么有对象都会使用的,依赖的是类,里面不能出现self属性
    def test(cls): # cls = class
    print(cls) # <class '__main__.Dog'>
    # print(cls.nickname) # AttributeError: type object 'Dog' has no attribute 'nickname'


    dog1 = Dog('zzzz')
    dog1.run()
    dog1.test()
  • 相关阅读:
    体验极佳的程序
    如何修改文档等系统文件的位置
    Demo
    Spring Boot与检索/ElasticSearch
    Java NIO:NIO概述
    Centos7 配置静态IP并使用xshell远程连接
    宏定义能否被赋值
    Centos7没有ETH0网卡
    Bringing up interface eth0: Device eth0 does not seem to be presen
    Git 常用命令
  • 原文地址:https://www.cnblogs.com/SmartCat994/p/12306928.html
Copyright © 2020-2023  润新知