• python之类的详解


    首先python中一切皆为对象,类型的本质就是类,所以,不管你信不信,你已经使用了很长时间的类了

    >>> dict #类型dict就是类dict
    <class 'dict'>
    >>> d=dict(name='eva') #实例化
    >>> d.pop('name') #向d发一条消息,执行d的方法pop
    'eva'
    View Code

     从上面的例子来看,字典就是一类数据结构,我一说字典你就知道是那个用{}表示,里面由k-v键值对的东西,它还具有一些增删改查的方法。但是我一说字典你能知道字典里具体存了哪些内容么?不能,所以我们说对于一个类来说,它具有相同的特征属性和方法。

    而具体的{'name':'eva'}这个字典,它是一个字典,可以使用字典的所有方法,并且里面有了具体的值,它就是字典的一个对象。对象就是已经实实在在存在的某一个具体的个体。

    再举一个其他的例子,通俗一点,比如你现在有一个动物园,你想描述这个动物园,那么动物园里的每一种动物就是一个类,老虎、天鹅、鳄鱼、熊。他们都有相同的属性,比如身高体重出生时间和品种,还有各种动作,比如鳄鱼会游泳,天鹅会飞,老虎会跑,熊会吃。

    但是这些老虎熊啥的都不是具体的某一只,而是一类动物。虽然他们都有身高体重,但是你却没有办法确定这个值是多少。如果这个时候给你一只具体的老虎,而你还没死,那你就能给他量量身高称称体重,这些数值是不是就变成具体的了?那么具体的这一只老虎就是一个具体的实例,也是一个对象。不止这一只,其实每一只具体的老虎都有自己的身高体重,那么每一只老虎都是老虎类的一个对象。

    在python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是‘类’,对象是则是这一类事物中具体的一个。

    首先先声明类

    class People:   #定义一个人类
        role = 'people'  #人的角色属性都是人
        def walk(self):  #人都可以走路,也就是有一个走路方法,也叫动态属性
            print("people is walking...")
    View Code

    类有两种作用:属性引用和实例化

     属性引用(类名.属性)

    class People:   #定义一个人类
        role = 'people'  #人的角色属性都是人
        def walk(self):  #人都可以走路,也就是有一个走路方法
            print("people is walking...")
    
    
    print(People.role)  #查看人的role属性
    print(People.walk)  #引用人的走路方法,注意,这里不是在调用
    View Code

    实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征

    class People:   #定义一个人类
        role = 'People'  #人的角色属性都是人
        def __init__(self,name):
            self.name = name  # 每一个角色都有自己的昵称;
            
        def walk(self):  #人都可以走路,也就是有一个走路方法
            print("People is walking...")
    
    
    print(People.role)  #查看人的role属性
    print(People.walk)  #引用人的走路方法,注意,这里也不是在调用
    View Code

    实例化的过程就是类——>对象的过程

    原本我们只有一个Person类,在这个过程中,产生了一个egg对象,有自己具体的名字、攻击力和生命值。

    语法:对象名 = 类名(参数)

    egg = People('egon')  #类名()就等于在执行People.__init__()
    #执行完__init__()就会返回一个对象。这个对象类似一个字典,存着属于这个人本身的一些属性和方法。
    #你可以这样的理解:egg = {'name':'egon','walk':walk}

    关于self

    self:其实我是这样称呼它的,self魔法函数,在实例化时自动将对象/实例本身传给__init__的第一个参数,你也可以给他起个别的名字,但是正常人都不会这么做。
    因为你瞎改别人就不认识

  • 相关阅读:
    [剑指offer] 42. 和为S的两个数字
    [剑指offer] 41. 和为S的连续正数序列
    datagridview bindingsource刷新数据
    datagridview bindingsource
    slot-具名插槽
    基于uniapp的ui库
    组件之间通讯
    vue实现word或pdf文档导出的功能
    Vue之富文本tinymce爬坑录
    12道vue高频原理面试题,你能答出几道?
  • 原文地址:https://www.cnblogs.com/xuedine/p/11694899.html
Copyright © 2020-2023  润新知