python之面向对象(一)

首先要明白,编程中面向过程与面向对象是两码事,不是一样的东西
面向过程:
核心是过程,过程是什么?是解决问题的步骤,设计好的一条工作流水线,考虑周全什么时候处理什么事情
优点:降低写程序的复杂性,顺着步骤执行就行,堆叠代码
缺点:流水线的解决一个问题,动了其中一部分代码,全部程序需要重写
应用:一旦完成很少更改的场景,如Linux内核
面向对象:
简称oop,是一种程序设计思想,把对象作为程序的基本单元,并且一个对象包括数据和操作数据的办法,
类是抽象的模板,像动物是类,而猫,狗可以看成一种对象,实例是根据类创建出来的一个个具体的对象,每个对象都有相同的方法但是各自的数据不同
python使用class定义类,基本机构如下:

class 类名( ): #一般类的首字母是大写
	pass

例子:
定义一个学生类:

class Student( ):

			class room =  '2301'
			adress = '北京'
			
			

实例对象与类变量
实例变量指的是(实例)对象本身拥有的变量。Student类中__init__方法里的name和age就是两个实例变量
通过实例名加圆点的方式调用实例变量(可以通过对象名加点的方式去调用/访问属于对象的成员)

class Student():
    # 类里面可以包含数据
    classroom = '2301'
    address = '上海'
    # 上面classroom以及address是两个类的变量,不是实例变量
    # 类里面也可以构造函数
    # 方法是构造方法:只看可以在创建对象的时候被自动调用,不能手动调用
    def __init__(self,name,age):
        print('my name is ',name )
        # 实例变量,不属于类的变量
        self.name = name
        self.age = age
        print(self.name,self.age)
    # 操作
    def print_age(self):
        print('%s:%s'%(self.name,self.age))
#调用一个类创造一个对象
张三 = Student('张三',20)#Student()实际上在调用__init__方法
print(张三.name,张三.age)#直接调用对象拥有的两个实例变量操作方式:对象名.变量名
print(Student.address)# 可以通过类名.变量名,调用类的变量
print(张三.address)#也可以通过属于该类的对象名.变量名,调用类的变量,但是不能通过类名.实例变量名,来操作实例变量会报错
print(Student.age)#通过Student类来操作实例变量会报错

结果是:

my name is  张三
张三 20
张三 20
上海
上海
Traceback (most recent call last):
  File "D:******************py", line 22, in <module>
    print(Student.age)
AttributeError: type object 'Student' has no attribute 'age'

Process finished with exit code 1

如果要修改类的变量,一定要通过类名.变量名,进行修改,如果通过对象名.变量名进行修改,只是动态的给对象增加了一个实例变量,而类的变量并未发生改变
如:

LISI = Student('LISI',20)
print(LISI)
LISI.address = '广州'#动态的给LISI添加了一个实例变量
print(LISI.address)
print(张三.address)
print(Student.address)
 

此时同一个类下的对象张三下的实例变量并未发生改变
结果如下:

LISI 20
<__main__.Student object at 0x00000272D2947C40>
广州
上海
上海

Process finished with exit code 0

而变成类名.变量名,进行修改时,该类下的对象共用的变量都会发生改变

LISI.address = '广州'#动态的给LISI添加了一个实例变量
print(LISI.address)
print(张三.address)
print(Student.address)

Student.address = '深圳'
print(Student.address)
print(张三.address)
print(LISI.address)

出来的结果如下:

广州
上海
上海
深圳
深圳
广州

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值