码迷,mamicode.com
首页 > 编程语言 > 详细

python-类的基本使用

时间:2020-05-07 00:35:12      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:绑定   参数   一个   为什么   公共属性   使用   rar   私有属性   成员   

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

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)

    技术图片

  • 附:代码

    # -*- 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))
    
    

    技术图片

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

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

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

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

  • 理解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()
      
    • ![image-20200506225922460](/Users/mac/Library/Application Support/typora-user-images/image-20200506225922460.png)

    • 那为什么python要自动给你传self,也就是实例本身呢?

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

技术图片

技术图片

  • 附:代码

    
    
    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))
    
    

python-类的基本使用

标签:绑定   参数   一个   为什么   公共属性   使用   rar   私有属性   成员   

原文地址:https://www.cnblogs.com/shanshan-test/p/12839905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!