zoukankan      html  css  js  c++  java
  • python-类的基本使用

    类的基本使用(引用小猿圈)

    class Dog(): # 类以class开头,类的名字使用驼峰体命名。不加()为经典类,加()为新式类
        d_type = "京巴"  # 类的成员变量,类属性,类变量(属于每个实例共有的属性)
    
        def __init__(self,name,age):  # 初始化方法,实例化的时候会自动执行,会进行一些初始化工作
            self.name = name  # 将name与实例进行绑定,也就变成了私有属性
            self.age = age
    
        def say_hi(self):  # 类方法,第一个参数是self,self代表类实例本身
            print("hi,大家好我是一个{}".format(self.d_type))
    
    
    # d = Dog()  # 类的实例化
    # d2 = Dog()  # 类的实例化
    d = Dog("mjj",12)  # 类的实例化,实例化带有私有属性,这里的参数会直接传给__init__的方法中,这就是函数中参数的传递了
    d2 = Dog(name="ccc",age=18)
    
    print(d.name,d.age)
    print(d2.name,d2.age)
    
    print(d.d_type)  # 类的实例化调用类属性
    print(d2.d_type)  # 类的实例化调用类属性
    
    d.say_hi()  # 使用类的实例化调用类方法
    d2.say_hi()  # 使用类的实例化调用类方法
    
    
    print(id(d.d_type),id(d2.d_type))
    
    
    • 类属性:属于公共属性,这个值是存在类的内存空间,(每个实例有自己的内存空间)

      print(id(d.d_type),id(d2.d_type))
      

    • 私有属性:存储在初始化方法中,通过self.xxx = xxx将属性与实例进行绑定,因为self代表实例本身的嘛

    • 类方法中调用私有属性,使用self.xxx

    • 理解self是实例本身

      • 看我使用d.say_hello(),并没有传递任何的参数,但是没有报错。我们知道函数如果有形参的话,就必须要传递实参与之相对应,是因为python自动给传递了一个参数d.say_hello()相当于d.say_hello(d),为了验证我们在方法里面打印这个self看看与实例d的id是否一样

        class Dog(): # 类以class开头,类的名字使用驼峰体命名。不加()为经典类,加()为新式类
            d_type = "京巴"  # 类的成员变量,类属性,类变量(属于每个实例共有的属性)
        
            def __init__(self,name,age):  # 初始化方法,实例化的时候会自动执行,会进行一些初始化工作
                self.name = name  # 将name与实例进行绑定,也就变成了私有属性,把这两个值真正的存在实例里
                self.age = age
        
            def say_hello(self):
                print("hello ,大家好,我是{},年龄是{}".format(self.name,self.age))
                print("这里是类中say_hello()方法中的self的内存id:{}".format(id(self)))
        
        d = Dog("mjj",12)  # 类的实例化,实例化带有私有属性,这里的参数会直接传给__init__的方法中,这就是函数中参数的传递了
        
        print("这个是实例化对象d的内存id:{}".format(id(d)))
        d.say_hello()
        

      -

      • 那为什么python要自动给你传self,也就是实例本身呢?
        • 是为了要在类中打通私有属性与方法之间的调用,他知道你要用,就给你用
        • 在__init__中给你绑定上self,下面的say_hello(),再将self传递过来,这样你就可以使用了
    • 理解类变量和私有属性之间的区别

      ![image-20200506230926158](/Users/mac/Library/Application Support/typora-user-images/image-20200506230926158.png)

      img

    • 附:代码

      # -*- conding:utf-8 -*-
      # @Time : 2020/5/6 21:49 
      # @Author : shanshan
      # @File : 类的基本使用.py
      
      
      class Dog():  # 类以class开头,类的名字使用驼峰体命名。不加()为经典类,加()为新式类
          d_type = "京巴"  # 类的成员变量,类属性,类变量(属于每个实例共有的属性)
      
          def __init__(self, name, age):  # 初始化方法,实例化的时候会自动执行,会进行一些初始化工作
              self.name = name  # 将name与实例进行绑定,也就变成了私有属性,把这两个值真正的存在实例里
              self.age = age
      
          def say_hi(self):  # 类方法,第一个参数是self,self代表类实例本身
              print("hi,大家好我是一个{}".format(self.d_type))
      
          def say_hello(self):
              print("hello ,大家好,我是{},年龄是{}".format(self.name, self.age))
              print("这里是类中say_hello()方法中的self的内存id:{}".format(id(self)))
      
      
      # d = Dog()  # 类的实例化
      # d2 = Dog()  # 类的实例化
      d = Dog("mjj", 12)  # 类的实例化,实例化带有私有属性,这里的参数会直接传给__init__的方法中,这就是函数中参数的传递了
      d2 = Dog(name="ccc", age=18)
      
      print("这个是实例化对象d的内存id:{}".format(id(d)))
      d.say_hello()
      # d2.say_hello()
      
      print(d.name, d.age)
      print(d2.name, d2.age)
      
      print(d.d_type)  # 类的实例化调用类属性
      print(d2.d_type)  # 类的实例化调用类属性
      
      d.say_hi()  # 使用类的实例化调用类方法
      d2.say_hi()  # 使用类的实例化调用类方法
      
      print(id(d.d_type), id(d2.d_type))
      
      
  • 相关阅读:
    关于工作流程引擎中的岗位的设置的问题
    将要发布的开源CCOA的照片一览
    关于多个checkbox在IE6下自由表单设计器中的兼容问题
    ccflow流程自动发起功能增加,如何按指定的时间触发方式发起流程?
    Windows 如何远程强行关机
    Report bulder
    微软sample and code down web address
    如何查看sql server的死锁情况
    如何读取数据的所有用户表
    复制和数据库镜像
  • 原文地址:https://www.cnblogs.com/shanshan-test/p/12839905.html
Copyright © 2011-2022 走看看