初识面向对象
一:面向对象编程
1,类的概念 : 具有相同属性和技能的一类事物。 比如:人类(抽象)
对象:就是对一个类的具体描述。 比如:具体的人(具体)
2,面向对象的特点:结局的不确定性
3,为什么要引入面向对象?
(1)使得代码之间的角色关系更加明确
(2)增强了代码的可扩展性
(3)规范了对象的属性和技能
二:查看静态变量的两种方式
1.类名.__dict__['静态变量名'] 可以查看,但是不能删改
2.类名.静态变量名 直接就可以访问,可以删改,删除一个静态变量 del 类名.静态变量名
# class Person: # role = 'person' # 静态属性 # def f1(self): # 动态属性 方法(函数) 默认带一个参数self # print(1234567) # # print(Person.__dict__) # print(Person.__dict__['role']) # # 内置的双下方法(查看静态变量的第一种方式,只能查看,不能修改) # # print(Person.role) # Person.role = 456 # print(Person.role) # del Person.role # print(Person.__dict__) # #查看静态变量的第二种方法,可以对静态变量进行查看,修改和删除
三:引用动态变量
1.类名.方法名,查看这个方法的内存地址
2.类名.方法名(实参产生一个实例) 调用了这个方法,必须传一个实参,这个实参传给了self
class Person: role = 'person' # 静态属性 def f1(self): # f1 叫做动态属性 ,方法(函数) 默认带一个参数self print(1234567) print(Person.f1) #<function Person.f1 at 0x00000000026F9950> Person.f1('aa') #1234567
四:创建一个对象
1,类名()就可以创造一个对象(实例)。
即对象=类名(),这个过程又叫做实例化。在创造对象的过程中,会创造一个新的名称空间,唯一属于这个对象。
2,在类的内部 self是本类的一个对象,
3,在类的外部,每一个对象都对应着一个名字,这个对象指向一个对象的内存空间
class Person: role='person' #静态属性 def __init__(self): #动态属性 print("执行了") alex=Person() #执行了
ps:上述程序就是实例化(创建一个对象)的过程,程序的最后一句 alex=Persion() , 在这里alex只是一个变量,用于接收调用后的结果,在调用的过程中,alex只是接收一个变量,这个变量刚好就是创建出来的那个对象。
【注】实例化的过程分析:
(1) 首先创造一个实例,它将会作为一个实参。(开辟空间,让它和创造的实例联系起来)
(2)然后自动促发__init__的方法,并且把实例以参数的形式传递给__inin__方法中的self形参
(3)执行完__init__方法后,会将创建的实例自动返回给alex
五:在创建对象时,如何给这个对象添加属性呢?
这时就要用到__init__方法: 它是一种初始化方法,给一个对象添加一些基础属性的方法,一般情况下是针对self的赋值
程序及分析如下:
class Person: role='person' #静态属性 def __init__(self,name,sex,hp,ad): #动态属性 self.__dict__['name']=name self.__dict__['sex'] = sex self.__dict__['sex'] = sex self.__dict__['ad'] = ad #因为此处只能返回默认的self,但是self里面内置了一个空字典, #所以只能往self里的字典加东西,才能让外面的alex感知到,这样就有了属于sb自己的一堆属性了。 alex=Person("sb","男","20","30") print(alex.__dict__) #{'name': 'sb', 'sex': '男', 'ad': '30'} #self 和 alex 处于同一个内存地址,self能够查看dict,同样也可以通过alex查看。
程序也可以简化如下(注:也可以对所创建的对象的属性进行修改):
class Person: role='person' #静态属性 def __init__(self,name,sex,hp,ad): #动态属性 self.name=name self.sex = sex self.hp = sex self.ad = ad alex = Person("sb", "男", "20", "30") alex.__dict__["name"]='sss' print(alex.name)
六:在创建完对象后,如何对方法进行调用呢?
1,类名.方法名(对象名) # 那么方法中的self参数就指向这个对象
2,对象名.方法名() 这样写 相当于 方法中的self参数直接指向这个对象
class Person: role = 'person' # 静态属性 def __init__(self,name,sex,hp,ad): self.name = name # 对象属性 属性 self.sex = sex self.hp = hp self.ad = ad def attack(self): #动态属性 ,方法(函数) print('%s发起了一次攻击'%self.name) alex = Person('a_sb','男',1,5) alex.attack() # Person.attack(alex)