python学习笔记(七)——类基础

前沿

问题一: 什么是类?

类是一个独立存放变量(属性/方法)的空间。 用来描述具有相同属性和方法的对象集合,它定义了该集合中每个对象所共同的属性和方法。 类是对象的抽象化,对象是类的实例化。类不代表具体的事物,而对象表示具体的事物。
比如人类,动物,植物等等,这些都是类的概念。 对象是通过类的模板打造出来的

问题二: 什么是面向过程

看名字它是注重过程的。当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数和数据(用于方法的参数) 。然后按照一定的顺序,执行完这些方法(每个方法看作一个个过程),等方法执行完了,事情就搞定了。

问题三: 什么是面向对象

看名字它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。

类的定义

class定义类,与函数的定义def相似,空格跟类名

类名一般都是首字母大写,“驼峰命名法”,首个单词字母大写。

类名后面可以加括号,也可以不加,默认都是继承object类。

变量名,都是小写。单词之间下划线隔开

python中类的定义语法如下:

class 类名:
	pass    

类的三要素:①类名属性---变量方法---函数

类属性:定义在类方法之外
类方法:类中定义的函数
类属性的访问:类名.属性名
类方法的调用:类名.方法名

注意:(重点)

  • 实例对象可以访问类属性
  • 实例属性有独立内存空间
  • 类不能访问实例属性
  • 类不能访问实例方法
  • 实例对象不能访问类方法

示例 :

class Teacher:
    name = "鲁班"  # 类属性
    def age():
        print('我要上王者')

Teacher.name = "李白"    # 改变类的属性
Teacher.name2 = '典韦'  # 类外--添加类属性
print(Teacher.name2)
t = Teacher()  # 创建一个Teacher()的实例t
Teacher.age()   # 调用Teacher类的方法
print(Teacher.name)  # 调用Teacher类的属性
print(t.name)  #实例对象可以访问类属性
#t.age()  #错误   实例对象不能访问类方法

print('Teachar.name的id:%d'%id(Teacher.name))
print('t.name为改变前的id:%d'%id(t.name))
t.name = "妲己"
print('t.name改变后的id:%d'%id(t.name))



执行结果:
典韦
我要上王者
李白
李白
Teachar.name的id:2756328801008
t.name为改变前的id:2756328801008
t.name改变后的id:2756328801184

类的实例化

实例化是由抽象到具体的过程

定义:实例名 = 类名()

类是实例的工厂,类提供的是母版

实例是一个独立存放变量的空间

例如:

class Car:
    boon = 4
audi = Car()  # 实例化出来的对象
bmw = Car()
audi.boon = 5  #对象添加的属性,空间是独立的,其他的访问不到
print(audi.boon)   
print(bmw.boon)

执行结果:
5
4

方法

封装在类里的一种特殊的函数

示例:

class Hero:
    name = '鲁班'
    def run(self):    # self 就是一个参数   代表 实例本身   约定俗成self
        print('五连绝世')

str = Hero()   # 实例化对象
str.run()    # ok   实例化调用方法
Hero.run(str)
#Hero.run()   #错误  类不能调用实例方法
print('%s拿了五杀'%str.name)
print('%s拿了五杀'%Hero.name)   

执行结果:
五连绝世
五连绝世
鲁班拿了五杀
鲁班拿了五杀

这里有了个问题,加了self有什么作用?
self:代表实例本身 ,加了self代表实例方法,没self代表类方法

了解:魔法方法

dir(对象) 查看对象所有的魔法方法

带两个下划线的 叫做魔法方法 有特殊的作用 它们的调用时由python解释器去调用的每一个方法调用的时机都是不一样的 不需要手动调用。

构造方法

初始化

以双下划线开头且以双下划线结尾的固定方法,他们会在特定的时机被触发执行,__init__就是其中之一,它会在实例化之后自动被调用,以完成实例的初始化。

示例:

class Hero:
     def __init__(self,name):  #两个下划线,初始化方法
        self.name = name
     def state(self):   #在Hero类中定义state方法
        print('%s又没了'%self.name)  #调用实例wum的name属性

wum = Hero('鲁班')   #实例化时需要传一个参数
wum.state()   #调用state方法

执行结果:
鲁班又没了

init参数传递过程:
实例化产生一个类的实例—>python自动调用实例.init(参数)—>转换为类.init(实例,参数)

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值