面向对象
⑴对象。
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件,主要是用来描述某个事物的属性。
⑵对象的状态和行为。
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中
⑶类。
具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
面向对象: 具有相同的属性值的实际存在的例子,也就是实例
类: 具有相同方法的属性的一类事物
函数定义方式: 使用def 函数() :
类的定义方式:使用class 类名: #类名第一个字母应该要大写(约定俗成)
class Dog: 变量 = 1000: 变量2 = 'abc' 变量3 = [(1,2),(3,4)]
# 上面这个式子中,变量,变量2,变量3,就是对象,描述了类的详细属性
如果想要调用类中的对象,也就是变量或者方法的话有两种方式
第一种:使用__dic__t方法 ,如果直接运行这个方法,可以查类中的所有的可调用的参数
# 使用.__dict__['变量'] class Dog: 变量 = 1000 变量2 = 'abc' 变量3 = [(1,2),(3,4)] print(Dog.__dict__['变量']) print(Dog.__dict__['变量2']) print(Dog.__dict__['变量3'])
第二种 ,这种方式也是最常用的方式
#第二种是直接调用 #print(类名.类中的变量或者方法) class Dog: 变量 = 1000 变量2 = 'abc' 变量3 = [(1,2),(3,4)] print(Dog.变量) print(Dog.变量2) print(Dog.变量3)
实例化的 过程
1 开辟一个新的空间
2 定义一个__init__(self)方法,这个方法默认有一个参数,如果有其他参数需要按照顺序一一对应
3 执行init 方法
4 类会将返回值自动返回给调用者
class Dog: # 开一个空间用来存放Dog类 def __init__(self,name,blood,ad,kind): # 定义一个init 方法 self.name = name self.hp = blood # 执行init方法 self.ad = ad self.kind = kind hei = Dog('小黑',300,20,'哈士奇') # self返回值会自动返回给调用者print(hei.name)
我们不光可以在类外直接调用变量,还可以进行增删改
1 改
class Dog: # 开一个空间用来存放Dog类 def __init__(self,name,blood,ad,kind): # 定义一个init 方法 self.name = name self.hp = blood # 这是在内部进行增加,赋值, self.ad = ad self.kind = kind hei = Dog('小黑',300,20,'哈士奇') print(hei.name) hei.name = '不请自来' # 这样可以在类的外部进行修改self参数
2 增
class Dog: # 开一个空间用来存放Dog类 def __init__(self,name,blood,ad,kind): # 定义一个init 方法 self.name = name self.hp = blood self.ad = ad self.kind = kind hei = Dog('小黑',300,20,'哈士奇') print(hei.name) hei['maxhp'] = 10 # 这几做到了在类的外部数值进行增加 print(hei.hp) #
3 删除
class Dog: # 开一个空间用来存放Dog类 def __init__(self,name,blood,ad,kind): # 定义一个init 方法 self.name = name self.hp = blood self.ad = ad self.kind = kind hei = Dog('小黑',300,20,'哈士奇') print(hei.name) del hei.hp #这就做到了在外部进行删除,删除了hp的内容
类中的变量:
动态变量: 方法,函数(对象)
静态变量: 定义的普通变量比如 a =1 ....
rom math import pi print(pi) class Circle: def __init__(self,r): self.r = r def area(self): return pi * self.r**2 def perimeter(self): return 2*self.r*pi c1 = Circle(5) c2 = Circle(15) print(c1.area()) print(c1.perimeter()) print(c2.area()) print(c2.perimeter()) # 在类中把操作一般都写在方法内, # 如果直接写在init方法内, from math import pi print(pi) class Circle: def __init__(self,r): self.r = r return pi * self.r**2 c1 = Circle(5) print(c1.area()) c1 = Circle(10 ) # 这个只是修改了self中的r,而不会改变结果。在第一次调用的时候他已经被定义了,r就是一个一个键的值,如果改了这个值,对整个式子没有影响 print(c1.area()) #这两个的结果相同