day 8
面向对象
类
一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用
特征被称为属性
行为被称为方法
类就相当于制造飞机时的图纸,是一个模板,负责创建对象
对象
由类创建出来的一个具体存在,可以直接使用
由哪一个类创建出来的对象,就拥有在哪一个类中的定义的:属性、方法
对象就相当于用图纸制造的飞机
在程序开发中,应该先有类,再有对象
类和对象的关系
类是模板,对象是根据类这个模板创造出来的,应该先有类,再有对象
类只有一个,而对象可以有很多个
不同对象之间属性可能会各不相同
类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多也不可能少
定义类
class 类名:
def 方法1(self,参数列表):
pass
def 方法2(self,参数列表):
pass
类名命名规则要符合大驼峰命名法
创建对象
对象变量 = 类名()
class Cat:
def eat(self):
# 哪一个对象调用的方法,self就是哪一个对象的引用
print("%s eat fish" % self.name)
def drink(self):
print("%s drink water" % self.name)
# 创建猫对象
tom = Cat()
# 可以使用 .属性名 利用赋值语句就可以了
tom.name = "Tom" # 不推荐使用
tom.eat()
tom.drink()
print(tom)
addr = id(tom)
print("%d" % addr) #%d可以输出十进制,%x可以输出十六进制
# 再创建一个猫对象
lazy_cat = Cat()
lazy_cat.name = "lazy cat"
lazy_cat.eat()
lazy_cat.drink()
print(lazy_cat)
lazy_cat2 = lazy_cat
print(lazy_cat2)
初始化方法
——init——
在方法内部使用self.属性 = 形参接收外部传递的参数
在创建对象时,使用类名(属性1,属性2……)调用
class Cat:
def __init__(self, new_name):
print("这是一个初始化方法")
# self.属性名 = 属性的初始值
# self.name = "Tom"
self.name = new_name
def eat(self):
print("%s eat fish" % self.name)
# 使用类名()创建对象时,会自动调用初始化方法 __init__
tom = Cat("Tom")
print(tom.name)
lazy_cat = Cat("lazy cat")
lazy_cat.eat()
——del——
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
# tom 是一个全局变量
tom = Cat("Tom")
print(tom.name)
# del关键字可以删除一个对象
del tom
print("-" * 50)
——str——
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
def __str__(self):
# 必须返回一个字符串
return "I am a cat %s" % self.name
# tom 是一个全局变量
tom = Cat("Tom")
print(tom)
封装
class Person():
def __init__(self, name, weight):
# self.属性 = 形参
self.myname = name
self.myweight = weight
def __str__(self):
return "我的名字叫%s 体重是%.2f公斤" % (self.myname, self.myweight)
def run(self):
print("%s爱跑步,跑步锻炼身体" % self.myname)
self.myweight -= 0.5
def eat(self):
print("%s是吃货,吃完这顿再减肥" % self.myname)
self.myweight += 1
xiaoming = Person("xiaoming", 75.0)
xiaoming.run()
xiaoming.eat()
print(xiaoming)
xiaomei = Person("xiaomei", 45)
xiaomei.eat()
xiaomei.run()
xiaomei.run()
print(xiaomei)