类与对象:
类:具有相同属性和方法的一组对象的集合
对象:具体的一样东西
举例:
- 类:飞机图纸、狗
- 对象:飞机、我现在养的那条狗
类与对象的关系:
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类.类描述了一组有相同特性(属性)和相同行为(方法)的对象。
类与对象的区别:
1,类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。
2,对象是类的一个具体。它是一个实实在在存在的东西。
3,类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。
4,对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。
类由三个部分组成
- 类的名称:类名(狗)
- 类的属性:一组数据(狗的颜色,体重,狗的类型,性别)
- 类的方法:允许进行操作的方法(行为/功能)(会汪汪叫、会摇尾巴、咬人等)
举例:
- 类名:Tank
- 属性:重量、速度、材料
- 方法(功能):开炮、移动、转弯
定义一个类
class Cat: #类名:
#属性
#方法
def eat(self): #在定义方法时,其第一个参数需要写上self
print("猫在吃鱼.....")
def drink(self):
print("猫正在喝可乐!")
创建一个对象
class Cat: #定义了Cat类
#属性
#方法
def eat(self): #在定义方法时,其第一个参数需要写上self
print("猫在吃鱼.....")
def drink(self):
print("猫正在喝可乐!")
#创建一个对象
tom = Cat()
程序运行流程
- 定义了Cat类
- 执行Cat()(向操作系统申请一片内存空间)
- 返回对象的引用
- 变量tom指向创建的Cat对象的引用
调用“对象的方法”
class Cat: #定义了Cat类
#属性
#方法
def eat(self): #在定义方法时,其第一个参数需要写上self
print("猫在吃鱼.....")
def drink(self):
print("猫正在喝可乐!")
#创建一个对象
tom = Cat()
tom.eat()
tom.drink()
"""
运行结果:
soarli@soarli:~/Desktop/mxdx$ python3 1.py
猫在吃鱼.....
猫正在喝可乐!
"""
给对象添加属性
class Cat: #定义了Cat类
#属性
#方法
def eat(self): #在定义方法时,其第一个参数需要写上self
print("猫在吃鱼.....")
def drink(self):
print("猫正在喝可乐!")
def introduce(self):
print("%s的年龄是%d"%(tom.name,tom.age))
#创建一个对象
tom = Cat()
#调用tom指向的对象中的 方法
tom.eat()
tom.drink()
#给tom对象添加两个属性(变量)
tom.name = "汤姆"
tom.age = 40
#验证tom指向的对象属性是否添加成功(方式1)
#print("%s的年龄是%d"%(tom.name,tom.age))
#验证tom指向的对象属性是否添加成功(方式2)
tom.introduce()
创建多个对象
class Cat: #定义了Cat类
#属性
#方法
def eat(self): #在定义方法时,其第一个参数需要写上self
print("猫在吃鱼.....")
def drink(self):
print("猫正在喝可乐!")
def introduce(self):
#print("%s的年龄是%d"%(tom.name,tom.age))
print("%s的年龄是%d"%(self.name,self.age))
#注意:
#self会把引用设置为调用者(不一定非要是self,名字相同即可)
#上面如果不写使用self(使用被注释的那一行,会导致蓝猫的属性无法显示)
#创建一个对象
tom = Cat()
#调用tom指向的对象中的 方法
tom.eat()
tom.drink()
#给tom对象添加两个属性(变量)
tom.name = "汤姆"
tom.age = 40
#验证tom指向的对象属性是否添加成功(方式1)
#print("%s的年龄是%d"%(tom.name,tom.age))
#验证tom指向的对象属性是否添加成功(方式1)
tom.introduce()
lanmao = Cat()
lanmao.name = "蓝猫"
lanmao.age = 10
lanmao.introduce()
__init__方法(魔法方法):
只要在类里面添加__init__方法,Python程序在创建对象时会自动进行(以tom对象为例):
- 创建一个对象
- 自动调用__init方法
- 返回 创建对象的引用 给tom
class Cat: #定义了Cat类
#属性
"""定义了一个Cat类"""
#初始化对象
#创建魔法方法
def __init__(self):
print("----haha----")
#方法
def eat(self): #在定义方法时,其第一个参数需要写上self
print("猫在吃鱼.....")
def drink(self):
print("猫正在喝可乐!")
def introduce(self):
#print("%s的年龄是%d"%(tom.name,tom.age))
print("%s的年龄是%d"%(self.name,self.age))
#创建一个对象
tom = Cat()
#调用tom指向的对象中的 方法
tom.eat()
tom.drink()
#给tom对象添加两个属性(变量)
tom.name = "汤姆"
tom.age = 40
#验证tom指向的对象属性是否添加成功(方式1)
#print("%s的年龄是%d"%(tom.name,tom.age))
#验证tom指向的对象属性是否添加成功(方式1)
tom.introduce()
lanmao = Cat()
lanmao.name = "蓝猫"
lanmao.age = 10
lanmao.introduce()
"""
运行结果:
soarli@soarli:~/Desktop/mxdx$ python3 1.py
----haha----
猫在吃鱼.....
猫正在喝可乐!
汤姆的年龄是40
----haha----
蓝猫的年龄是10
"""
调用魔法方法的流程:
class Cat: #定义了Cat类
#属性
"""定义了一个Cat类"""
#初始化对象
#创建魔法方法
def __init__(self, new_name, new_age):
self.name = new_name
self.age = new_age
#方法
def eat(self): #在定义方法时,其第一个参数需要写上self
print("猫在吃鱼.....")
def drink(self):
print("猫正在喝可乐!")
def introduce(self):
#print("%s的年龄是%d"%(tom.name,tom.age))
print("%s的年龄是%d"%(self.name,self.age))
#创建一个对象
tom = Cat("汤姆",40)
tom.eat()
tom.drink()
#tom.name = "汤姆"
#tom.age = 40
tom.introduce()
lanmao = Cat("蓝猫",10)
#lanmao.name = "蓝猫"
#lanmao.age = 10
"""
运行结果:
soarli@soarli:~/Desktop/mxdx$ python3 1.py
猫在吃鱼.....
猫正在喝可乐!
汤姆的年龄是40
蓝猫的年龄是10
"""
__str__方法:
和__init__方法类似,Python也会自动调用__str__方法,其return的值可以直接print输出。
class Cat: #定义了Cat类
#属性
"""定义了一个Cat类"""
#初始化对象
#创建魔法方法
def __init__(self, new_name, new_age):
self.name = new_name
self.age = new_age
#创建__str__方法:
def __str__(self):
return "%s的年龄是%d"%(self.name,self.age)
#方法
def eat(self): #在定义方法时,其第一个参数需要写上self
print("猫在吃鱼.....")
def drink(self):
print("猫正在喝可乐!")
def introduce(self):
#print("%s的年龄是%d"%(tom.name,tom.age))
print("%s的年龄是%d"%(self.name,self.age))
#创建一个对象
tom = Cat("汤姆",40)
lanmao = Cat("蓝猫",10)
print(tom)
print(lanmao)
"""
运行结果:
soarli@soarli:~/Desktop/mxdx$ python3 1.py
汤姆的年龄是40
蓝猫的年龄是10
"""
参考资料:
https://blog.csdn.net/Roger_CoderLife/article/details/81565683
版权属于:soarli
本文链接:https://blog.soarli.top/archives/67.html
转载时须注明出处及本声明。