Python类class和实例创建 【自用笔记】


前言

过几天要开始刷算法,结果提前预热了下发现python很多基础功能都不了解,只好赶快补救了,正好也是第一次写博客,就当是为几天后的刷题做准备了…本文知识点总结于其他文章,纯自用,以防以后忘了。

一、Python类的定义

  • 类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 类的构造方法__init__():构造方法,当创建实例时,init() 方法被自动调用为创建的实例增加实例属性。目的是为了使对象初始化,且每个对象必须正确初始化后才能被正确调用。
    在这里插入图片描述

二、类的构造方法__init__()

class XXX(Object): # 创建XXX类,并命名为XXX
	def __init__(self,x): # 初始化一个属性r
		self.x=x # 为要创建的实例赋予属性r赋值
	def xx_function(self, ... , ...): # 类中定义的函数
	 	pass ...

三、self应该如何描述

关于self: self是面向对象部分的内容,配合类一起用的。如果不了解面向对象,可以简单记为:只要是调用这个类的成员变量或者方法就加self,调用库函数什么的不加

self 代表类的实例,是通过类创建的实例。注意,在定义类时这个实例我们还没有创建!它表示的我们使用类时创建的那个实例,以方便我们清楚创建实例将如何参与访问属性

__init__第一个参数必须是self,它是类下面所有方法必须的参数,后续参数则可以自由指定,和定义函数没有任何区别

创建实例时就必须要提供除 self 以外的参数

xxx1 = XXX(1)  # 创建实例时直接给定实例属性,self不算在内
print(xxx1.x)  # 实例名.属性名->访问属性

注意:实例名.属性名 (xxx1.x) 访问属性,是我们上面XXX类__init__() 方法中 self.x 的 x 这个实例属性名,而不是__init__(self, x)方法中的 x 参数名,如下更加容易理解:

class XXX(object):  # 创建XXX类
   def __init__(self, X):  # 约定成俗这里应该使用x,它与self.x中的x同名
       self.x = X

xxx1 = XXX(1)  
print(xxx1.x)  #我们访问的是小写x

四、实例属性和类属性

在上述段落我们得知,实例属性其实就是self.x中的x,并不是__init__(self, x)中的x
而类属性不同于实例属性每个实例各自拥有的特点,它是属于一整个类的属性,即将类作为一个对象,因此则所有实例都可以访问该类的属性,并且所有实例访问的类属性都是同一个。
e.g., 圆作为一个类,每个圆具有不同的半径(一个实例属性),但是所应用的圆周率一定是3.1415926…(类属性)。

五、代码

  1. 用__init__()方法定义一个实例:
class Student:
    def __init__(self,name,number): # name和number要初始化的属性
        self.name = name # self.后跟的name/number为实例属性名
        self.number = number #为两个实例属性名赋值,所赋予的是实例属性
    def student_info(self):
        print('name: {}, number: {}'.format(self.name, self.number)) # 输出name和number
                
student = Student('zhang', 34) # ()内为实例属性,将赋予给self.实例属性名
student.student_info() # 先输出def中的print语句
print(student.__dict__) # 再输出一个字典

输出结果为

name: zhang, number: 34
{'name': 'zhang', 'number': 34}

obj.__ dict__是为了查看对象内部所有属性名和属性值组成的字典

  1. 不用__init__()方法定义类
class Student:
    def student_info(self,name,number): # 没有初始化,直接过def的方法
        print('name: {}, number: {}'.format(name,number))
                
student=Student() # 此处student因为没有初始化,没有任何值。
student.student_info('zhang',34) # 先输出def中的print语句
print(student.__dict__) # 由于student没有值,输出空集

输出结果为

name: zhang, number: 34
{}

如果没有__init__对self初始化,那么直接print(student.__ dict__)将会输出空集: {}, 说明Student这个实例并没有存储到数据。


总结

简单把自己不会的有关类的一些知识整合了下,肯定还有很多不会的,不过就先记这么多,以后遇到不会的再补充或重写一个完整的。

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值