理解面向对象
为了方便了解,我们拿面过过程做一个对比
例:肚子饿了,想吃饭
面向过程:下楼-去超市-买菜-买米-买肉-回家-炒菜-炒肉-做饭-盛饭-吃饭
面向对象:点外卖
总结:面向对象就是将编程当成一个事物,对外界来说,事物是可以直接使用的,不用去管他内部的情况。而编程就是设置事物能够做什么事情
理解类和对象
类
类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物
~特征即属性
~行为即方法
类可以比作是我们脑袋中想象的图纸,对象就是根据这个想象出来的图纸生产出来的手机,也就是说类就是用来创建对象的。
对象
对象是类创建出来的真实存在的事物,比如:手机
注意:开发中,先有类,才有对象
是类的例如:汽车、学生、水果
是对象的例如:奔驰大G、张三、红富士苹果
类的创建
class 类名():
代码
pass
这里的类名一般采用首写字母大写的形式来表示类名,这样增加可读性和规范性。
#创建对象
l1 = [12,43,5,8]
列表是类,但是实例化列表就是对象了
class Person():
pass
l1=[12,43,4,5]
p1=Person()
print(type(l1))
print(type(p1))
输出结果:
类的概念
类的概念:对具有相同特征和行为的事物的统称
特征即属性,行为即方法
class Cat():
tail = 1 #一条尾巴
leg = 4 #四条腿
def zhua(self):
print('抓老鼠')
cat1 = Cat() #创建对象,实例化类
cat1.zhua()
print(cat1.tail)
输出结果:
class Cat():
tail = 1 #一条尾巴
leg = 4 #四条腿
def zhua(self):
print('抓老鼠')
cat1 = Cat() #创建对象,实例化类
cat1.color = 'white'
print(cat1.color)
cat2 = Cat()
输出:white
这时会发现cat2是没有color这个属性的,因为在外部定义的color是独属于cat1的,这个color叫做实例属性,而tail和leg属于类属性。
class Person():
def eat(self):
print('吃')
def drink(self):
print('喝')
def play(self):
print('玩')
def fun(self):
print('乐')
p1=Person()
p1.name = '张三'
p1.age = 18
p1.eat()
p2=Person()
p2.eat()
输出:
总结:类属性是所有对象都有的共同特征,而实例属性只是某个对象独有的特征。
魔术方法
class Dog():
def __init__(self,name,age,color):
self.name=name
self.age=age
self.color=color
print('__init__魔术方法')
dog1=Dog('小黄',2,'white')
print(dog1.name)
print(dog1.age)
print(dog1.color)
输出结果:
魔术方法就是定了类之后,实例化的对象每一个都会自动执行一次
class Dog():
def __init__(self,name,age,color):
self.name=name
self.age=age
self.color=color
print('__init__魔术方法')
def __str__(self):
print(f'这是:{self.name}')
return '123'
def __del__(self):
print('已删除')
dog1=Dog('小黄',2,'white')
# print(dog1.name)
# print(dog1.age)
# print(dog1.color)
dog2=Dog('小黑',3,'black')
# dog2.name='小黑'
# print(dog2)
del dog2
print(dog1.age)
print(dog2.age)
输出:
之后报错的原因是因为,dog2被删除了,所以name 'dog2' is not defined
类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问
class Demo():
__num =0 #私有属性
result=0 #公开属性
def count(self):
self.__num +=1
self.result +=1
print(self.__num)
run = Demo()
run.count()
run.count()
run.count()
print(run.result)
print(run.__num) #报错
输出结果:
私有属性不可以直接访问,但是可以间接访问