对象三要素:
- 属性:是什么?对应状态
- 方法:能做什么?对应行为
- 标识:内存地址
OOP(Object-oriented programming)——面向对象程序编程
# -*- coding: utf-8 -*-
"""
定义类
class 类名称(object|父类):
类属性
方法
例子:
人类
属性:姓名、性别、年龄、身高、体重
方法:吃饭、睡觉、跑步、说话
"""
class Human(object):
name="张三"
sex="男"
age="18"
height=170
weight=65
#self:示例(类本身)
def eat(self):
print("{}正在吃饭!".format(self.name))
def sleep(self):
print("{}正在睡觉!".format(self.name))
def run(self):
print("{}正在跑步!".format(self.name))
def info(self):
print("姓名:{},年龄:{},性别:{},身高:{},体重:{}".format(
self.name,
self.age,
self.sex,
self.height,
self.weight
))
if __name__ == "__main__":
zhangsan=Human() #实例化类成具体对象
print(zhangsan.name)#通过对象调用属性
zhangsan.eat()#通过对象调用方法
zhangsan.sleep()
zhangsan.run()
zhangsan.info()
print(zhangsan)
print("---------------------------------------")
lisi=Human()
lisi.name="李四" #通过对象调用属性重新赋值
lisi.age=22
lisi.sex="女"
lisi.weight=50
lisi.height=160
print(lisi.name)
lisi.eat()
lisi.sleep()
lisi.run()
lisi.info()
print(lisi)
# -*- coding: utf-8 -*-
class Human:
# 类属性
area = "中国"
skin = "黄色"
# 定义构造方法
def __init__(self, name="张三", age=18, sex="男", height=170, weight=65):
# 实例属性
self.name = name # 把name这个参数传递给self.name这个实例属性
self.age = age
self.sex = sex
self.height = height
self.weight = weight
def eat(self):
print("{}正在吃饭!".format(self.name))
def sleep(self):
print("{}正在睡觉!".format(self.name))
def run(self):
print("{}正在跑步!".format(self.name))
def info(self):
print("姓名:{},性别:{},年龄:{},身高:{}cm,体重:{}kg,国籍:{},肤色:{}".format(
self.name,
self.sex,
self.age,
self.height,
self.weight,
self.area,
self.skin
))
if __name__ == "__main__":
# 按照默认的参数实例化
zhangsan = Human()
print(zhangsan.name)
zhangsan.eat()
zhangsan.sleep()
zhangsan.run()
zhangsan.info()
print("-----------------------")
# 3.修改参数实例化
lisi = Human(name="李四", age=22, sex="女", height=160, weight=50)
lisi.area = "美国"
lisi.skin = "白色"
print(lisi.name)
lisi.eat()
lisi.sleep()
lisi.run()
lisi.info()
print("------------------------")
xiaomei = Human()
# 3.先实例化,通过实例化以后的对象.属性来重新赋值
xiaomei.name = "王五"
xiaomei.age = 26
xiaomei.sex = "保密"
xiaomei.height = 165
xiaomei.weight = 55
xiaomei.area = "日本"
xiaomei.skin = "黄色"
print(xiaomei.name)
xiaomei.eat()
xiaomei.sleep()
xiaomei.run()
xiaomei.info()
# -*- coding: utf-8 -*-
#from prettyprinter import cpprint
"""
继承:子类继承父类方法和属性
class 父类(object):
代码块
class 子类(父类):
代码块
"""
# 定义一个人类
class Human(object):
age = 18
height = 180
weight = 70
def eat(self):
print("吃饭!")
def run(self):
print("跑步!")
# 定义一个男孩类
class Boy(Human):
age = 12
height = 150
weight = 40
sex = "男"
# 重写,Girl和Human有同样名称的方法,就把Human中的同一个方法遮盖住,显示的是Girl中的方法
def eat(self):
print("小男孩正在吃饭!")
def play_game(self):
print("打游戏!")
# 定义一个女孩类
class Girl(Human):
age = 16
height = 160
weight = 50
sex = "女"
# 重写
def run(self):
print("小女孩正在跑步!")
def dance(self):
print("跳舞!")
# 定义一个年轻人类,多重继承,继承多个类
class Young1(Boy, Girl):
def common(self):
print("年轻人朝气蓬勃!")
def info(self):
print("*********************")
# super(子类名称,实例).属性|方法:调用父类的方法或者属性
# super调用就可以和self区分开:覆盖掉属性和方法
# 二次开发,覆盖原来框架的内容,调用原来框架的内容,super()
super(Girl, self).eat() # 调用Girl的父类的eat()方法
super(Girl, self).run() # 调用Girl的父类的run()方法
super(Young1, self).dance()
super(Young1, self).play_game()
print("*********************")
class Young2(Girl, Boy):
def common(self):
print("年轻人朝气蓬勃!")
if __name__ == "__main__":
zhangsan = Boy()
print(zhangsan.age, zhangsan.height, zhangsan.weight, zhangsan.sex)
zhangsan.eat()
zhangsan.run()
zhangsan.play_game()
print("----------------------")
lisi = Girl()
lisi.age = 16
lisi.height = 160
lisi.weight = 50
print(lisi.age, lisi.height, lisi.weight, lisi.sex)
lisi.eat()
lisi.run()
lisi.dance()
print("-----------------------")
wangwu = Young1()
print(wangwu.age, wangwu.height, wangwu.weight, wangwu.sex)
# 继承顺序,优先继承Boy
print(Young1.__mro__)
wangwu.run()
wangwu.eat()
wangwu.dance()
wangwu.play_game()
wangwu.info()
print("-----------------------")
wangwu = Young2()
print(wangwu.age, wangwu.height, wangwu.weight, wangwu.sex)
# 继承顺序,优先继承Girl
print(Young2.__mro__)
wangwu.run()
wangwu.eat()
wangwu.dance()
wangwu.play_game()
# cpprint(dir(wangwu))#查看dir可调用的信息