面向对象
什么是面向对象:object oriented programming
程序设计语言中的面向对象:
把现实中实际的物体, 使用程序设计语言描述出来。
怎么去描述?
综合物体的特征:类:属性以及功能,描述的是一类物体
把现实中的物体抽象成程序设计语言中的类
什么是类,什么是对象?
#每个人手里都有一台电脑
#laptop:笔记本这一类东西:
特征:
面向对象的使用:在软件设计阶段:object(对象)relation(关系)
在现实中的同一类物体,用类来描述
具体到某一个物体的时候,这个就是对象
对象从类而来》对象的类型就是类
类就是一种数据类型,你自己定义的类就是一种新的数据类型
data = 1 --> data --> int
如何去定义类
语法
class ClassName:
类中的语句
说明:类目使用驼峰命名法(多个连接在一起,首字母大写)
类中应该包含什么?
类把数据与功能绑定在一起
数据:定义变量
功能:函数 function
在类中定义的函数,不叫函数,叫方法【因为这个函数只属于这个类
只服务这个类和这类对象】
在定义方法的时候会默认携带self参数,这个参数指向自己类的对象
具体指向哪个对象?调用这个方法的对象
class CoolBoy:
name = None
age = None
def print_info(self):
print("what a swag boy")
qiu = CoolBoy()
x = Coolboy()
qiu.name = ???
x的name不会变
类变量
定义在类中,方法外的变量,叫做类变量
类变量用于类的所有实例共享的属性
对象变量
实例【对象】变量用于每个实例的唯一数据
对象之间相互独立
问题:如何取定义对象变量/实例变量
写在__init__中
def __init__ (self, name, age)这里要传参数
如果方法里没有name就去init对象变量中找
class Person:
type = "person"
def print_info(self):
print(self.name, self.age)
def __init__(self, name, age):
self.name = name
self.age = age
zhangsan = Person("zhangsan", 18)
lisi = Person("lisi", 20)
print(zhangsan.type)
zhangsan.print_info()
lisi.print_info()
work
1.定义一个类(不限定定义哪个类):
要求: a.需要有一个类变量
b.需要有>=2个的对象变量
c.定义一个方法:打印类变量和对象变量
d.使用print打印对象->输出为This is a object
e.实例化两个对象:且两个对象相加等于2
f.为对象添加一个临时变量temp_var
class Arg:
arg = 1
def __init__(self, arg, name):
self.arg = arg
self.name = name
def print_info(self):
print("This is a object")
arg1 = Arg(1, "zhangsan")
arg2 = Arg(1, "lisi")
print(arg1.arg + arg2.arg)
arg1.print_info()
arg1.temp_var = "unkown"
print(arg1.temp_var)
2.super的使用:
定义一个类A, 里面又一个方法print_info
定义一个类B, 里边有一个方法print_info和一个方法say_something
定义一个类C, 里边有一个方法say_something
定义一个类D, 里边有一个方法print_info和一个方法say_something
定义一个类E,继承类A, 类B, 类C,类D
实例化类E的对象
执行print_info和say_something方法
利用super,让执行print_info时调用B中print_info
利用super, 让执行say_something时调用C中say_something
利用super, 让执行print_info和say_something时调用
D中print_info和say_something
class A:
def print_info(self):
print("This is A")
class B:
def print_info(self):
print("This is B")
def say_something(self):
print("My name is B")
class C:
def say_something(self):
print("My name is C")
class D:
def print_info(self):
print("This is D")
def say_something(self):
print("My name is D")
class E(A, B, C, D):
def print_info(self):
super(A, E).print_info(self)
def say_something(self):
super(B, E).say_something(self)
e = E()
e.print_info()
e.say_something()
class E(A, B, C, D):
def print_info(self):
super(C, E).print_info(self)
def say_something(self):
super(C, E).say_something(self)