python基本使用-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)
附:代码
# -*- 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))
python基本使用-python-类的基本使用相关推荐
- python中的新式类与旧式类的一些基于descriptor的概念(上)
python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...
- python创建类的实例方法-Python中动态创建类实例的方法
简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模 ...
- python中若干关于类的问题
文章目录 前言 类的构造 类的方法 前言 本文介绍python中若干关于类的难题,这些问题或者概念竟然让人无法理解或者混淆.因而记录下来,若想到新的会继续更新. 类的构造 我们只知道__init__( ...
- [转]深刻理解Python中的元类(metaclass)
类也是对象 在理解元类之前,你需要先掌握Python中的类.Python中类的概念借鉴于Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Pytho ...
- Python中的元类是什么?
元类是什么,我们将它们用于什么? #1楼 请注意,此答案适用于2008年编写的Python 2.x,元类在3.x中略有不同. 元类是使"类"工作的秘诀. 新样式对象的默认元类称为& ...
- python装饰器类-Python 装饰器装饰类中的方法
title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...
- python装饰器实例-基于Python 装饰器装饰类中的方法实例
title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...
- python叫什么-python中什么叫类
python中什么叫类? 可以视为种类或者类型的同义词.所有的对象都属于某一个类,称为类的实例. 例如:鸟就是"鸟类"的实例.这就是一个有很多子类的一般(抽象)类:看到的鸟可能属于 ...
- python简介怎么写-python中如何写类
类的定义 Python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类: class Student(object): pass class后面紧接着是类名,即Student,类名通 ...
- python判断是否为类的实例,是否为子类
python判断是否为类的实例,是否为子类 文章目录: 一.获取类实例的名称 二.判断一个类是否是另外一个类的实例 三.判断某个实例是否是指定类的实例 首先定义两个类,一个父类,一个子类,这里并不定义 ...
最新文章
- Expression Blend学习动画基础
- mysql超时失效c3p0_解决c3p0和MySQL集成情况下,连接长时间闲置后重新使用时报错的问题...
- 8分钟答辩稿_干货 | 论文答辩,该掌握哪些技巧?
- Leetcode 53 最大子串和
- ASP.NET Core中为指定类添加WebApi服务功能
- Facebook轮播连结广告可展示5个图像与连结
- React-Native的TextInput组件的设置以及获取输入框的内容
- Python 爬虫---(5)Requests库的使用
- MyBatis基于Java API配置
- 新版CSDN编辑器示例(代码及显示样式)
- ASSD: Attentive Single Shot Multibox Detector
- JPG图片转换成Word文字教程分享
- 什么是商业模式(概念篇)
- 如何判断矩阵的谱半径 C语言,矩阵谱半径
- PSP 2000 USB连接后无法显示记忆棒内容 解决办法
- 在纪中的第二天,2017-7-8 总结:
- Java十进制转换为二进制算法
- Multisim-滑动变阻器、稳压二极管
- NOSQL的cap 原理
- c语言rfmtdate函数,Ecshop后台流程图
热门文章
- 异步任务-AsyncTask
- mac bash 下使用vi 快捷方式——因为没有alt键 所以没有办法 用vi模式也非常方便的...
- 421. Maximum XOR of Two Numbers in an Array——本质:利用trie数据结构查找
- composer 修改为 国内镜像
- 【题解】HNOI2008GT考试
- 使用 mysql workbench 建议
- [QA] MySQL Error 1050(42S01): Table already exist
- E-mail Composition and Decoding
- 铃铛计数问题——分块
- python抓取新浪微博评论并分析