面向对象编程
面向对象的基本思想
面向对象变成实际上是在创建类,之后再由类创建对象的一个过程,类实际上是一张图纸,用于规定对象的总体概括
而对象实际上是从图纸创建的出来的实体,实体可以涵盖图纸规定的内容,但是又有一些实际过程中的修改和加工
#设计车类
# class 表示创建类
# Car 表示类名
class Car:
pass
c=Car() # 把类的概念进行是例化,实列化的过程就是通过类来创建对象的过程
print(c) # <__main__.Car object at 0x000002710CBB8C0 # 可以看出c实际上是由Car来创建的对象
# 给车加东西
class Car:
pass
c=Car() # 把类的概念进行是例化,实列化的过程就是通过类来创建对象的过程
# 对象=类() 这个方式是创建对象的过程
c.lunzi="园的" # . 翻译成 “的” 表示 这辆车的轮子是园的
c.color="骚红的"
c.paizhao="京A6666"
c.pailiang="6.3T" # 轮子,颜色 拍照 排量 称为类的属性
print(c.pailiang) # 查看车的属性
print(c.price)# 'Car' object has no attribute 'price' 车对象没有price这个属性
"""
每创建一个对象 就开辟一个地址 该对象的所有属性 存在该地址
再次创建对象 就又开辟一个地址 这个地址没有上一个对象的属性 需要重新添加
"""
# 自己的类名 首字母大写 括号可加可不加 没有继承的时候可以不加
class Computer:
pass
c1=Computer() # 创建第一个对象 开辟地址 以下属性存在该地址
c1.pinpai="神州"
c1.price=100
c1.cpu="i7"
c1.neicun="1G"
c2=Computer() # 创建第二个 又开辟新地址 属性存在该地址
c2.pinpai="小米"
c2.price=1000
c2.cpu="i5"
c2.neicun="1T"
print(c1.pinpai)# 神州
print(c2.pinpai)# 小米
class Computer:
def __init__(self): # 构造方法 创建对象的时候系统自动访问 创建对象之后这个方法就调用了
# self 类的对象 当前创建的对象
print("调用")
c=Computer() # 调用 # 此时就执行了 __init__()
继承
# 继承 :子类自动拥有父类中除了私有内容外的所有其他内容 包括属性 方法 私有化下面回讲到
# 子类在父类的基础上 扩展了功能 父类里面的功能 称为 基类 子类自己的功能称为 派生功能
class Niu:
def da(self):
print("牛魔王大家很厉害")
def pao(self):
print("你上来啊")
class Honghaier(Niu): # 继承Niu类
def pao(self):
print("你好")
H=Honghaier()
H.da() #牛魔王大家很厉害 # 调用方法的时候 先找自己 再找父类 自己有的就不找父类了
H.pao() # 你好 # 自己又pao这个方法 就不用去调用父类的方法了
方法中传入类
# 修改程序
# 创建孙悟空类
class Sunwukong:
def da(self,yaoguai):
yaoguai.teng()
# 创建妖怪对象
class Zhizhujing:
def teng(self):
print("蜘蛛精很疼")
class Heixiongjing:
def teng(self):
print("黑熊精很疼")
class Baigujing:
def teng(self):
print("白骨精很疼")
# 实例化一个孙悟空和一个妖怪
swk=Sunwukong()
hxj=Heixiongjing()
# 孙悟空打妖怪
swk.da(hxj) # 黑熊精很疼
面向对象编程 成员
成员包括: 变量 方法 属性@property 私有
变量
1 实例变量 : 对象.XXXX=XXXX 又叫字段 或者 属性 给对象用的 实列变量通过对象调出
在__init__里面的属性可以叫做实列变量
对象自己添加的属性也叫实列变量
2 类变量: 可以直接使用类名进行访问的 也可以使用对象进行访问
当有类变量的时候 类变量单独存放在一个地址 (类变量是这个类共有的属性)
在创建对象后 开辟一个新的地址 存储创建对象的各种属性(实列变量)
当对象想调用各种属性的时候 先从自身寻找 找不到再去 访问类变量存储的地址寻找属性
如果这个对象自己创建了一个和类变量一样的属性 那么这个属性存储在这个对象自己的地址里面
并不会对对象地址的属性修改 下次访问的时候 就从自己的地址里面拿
# 实列变量
class Person:
def __init__(self,name,height,weight):
self.name=name
self.height=height
self.weight=weight # 这些属性就是实列变量
mahuateng=Person("马化腾","180","160")
print(mahuateng.height)# 实例变量
mahuateng.company="腾讯" # 也是实列变量
# 类变量
class Person:
country="中国" # 类变量 可以通过类来调用 也可以通过对象来调用
def __init__(self,name,age):
self.name=name
self.age=age
print(Person.country) # 类调用
p1=Person("Tom","18")
p2=Person("徐速","17")
print(p1.name,p2.name) # Tom 徐速 # 找属性的时候 先从自己的地址寻找 找不到在取类的地址寻找
print(p1.country,p2.country) # 中国 中国 # 对象自己没有这个country的属性 自己的地址找不到,就从类中去调用
p1.country="大清" # 对 p1 对象指定新的属性 这个时候就会在自己的地址存储一个新的属性 下次找的时候先从自己的地址找
print(p1.country) # 大清 #从自己的地址找到了
print(p2.country) # 中国 #自己的地址没有从类里面去找
Person.country="美国" # 对类属性进行修改 类属性只能由类修改
print(p1.country,p2.country