python学习,day5:面向对象

面向对象介绍

世界万物,皆可分类

世间万物,皆为对象

只要是对象,就肯定属于某种品类

只要是对象,就肯定有属性

例子:

人:思考,说话,吃喝拉撒。

特性:

class类

一个类及时对一类拥有相同属性的抽象、蓝图、原型。在类中定义了这些对象的都具有的属性(variables(data)),共同方法

object对象

一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之间有共性,亦有不同。

封装

在类中对数据的赋值,内部调用外部用户是透明的,这使类变成了一个胶囊或器官,里面包含着累的数据和方法。

继承

一个类可以派生出子类,在这个父类里定义的属性,方法自动被子类继承

多态

一个接口,多种实现

语法:

属性

方法

构造函数

析构函数

在实例释放、销毁的释藏执行的,通常用于做一些收尾工作,

私有方法,私有属性 

类变量

类变量的用途,大家共用的属性,节省开销

class Person:

  cn = '中国'

  def __init__(self,name,age,addr,cn = 'china')

  self.name =name

  self.cn =cn

p1 =Person(name,age,addr)

实例变量

# coding=utf-8
# Author: RyAn Bi
class Dog:             #定义类
    def __init__(self,name):  #构造函数,在实例化时做一些初始化的工作
        self.name =name
    def bulk(self):
        print('%s is a dog'%self.name)


d1= Dog('a')       #实例化(初始化一个类,造了一个对象)
d2 = Dog('b')
d3 = Dog('c')

d1.bulk()
d2.bulk()
d3.bulk()

下面模拟了一个CS游戏的代码,看备注

# coding=utf-8
# Author: RyAn Bi

class Role:
    n = 123  #类变量
    n_list = [] #定义一个类变量,列表格式
    name = '我是类name'
    def __init__(self,name,role,weapon,life_value=100,money=15000,):
        #构造函数
        #在实例化时做一些类的初始化的工作
        self.name = name  #实例变量(静态属性),作用域就是实力本身
        self.role = role
        self.weapon = weapon
        self.__life_value = life_value  #私有属性,只能在内部访问
        self.money = money
    def __del__(self):     #最后执行,析构函数,对象结束和消失或者删除或者程序退出的时候执行。
        print('%s is deaded..'%self.name)
    def shot(self):   #类的方法,功能(动态属性)
        print('shooting!!!!')
    def __shot1(self):   #私有方法,不能直接调用
        print('shooting!!!!')
    def got_shot(self):
        self.__life_value -= 50
        print('%s:ah..,I got shot..'%self.name)

    def buy_gun(self,gun_name):
        print('%s just bought %s'%(self.name,gun_name))
    def show_status(self):     #定义一个函数,可以调用私有属性
        print('name:%s weapon:%s life:%s:'%(self.name,self.weapon,self.__life_value))
r1 = Role('Alex','Police','AK47')     #生成一个角色,把一个类变成一个具体对象的过程,叫实例化
r2 = Role('Jack','Terrioist','UZI')     #生成一个角色,把一个类变成一个具体对象的过程,叫实例化
r1.got_shot()
r1.buy_gun('uzi')
r1.name = 'bb'    #添加一个实例变量,会覆盖以前的
r1.bullet_prove = True   #添加了一个之前没有的实例变量,是可以添加的
#del r1.weapon  #可以删除实例变量
r1.n = '改类变量'   #可以改r1的类变量(实际上是创造了一个实例变量),但r2不改变
print('r1:',r1.n,r1.name,r1.bullet_prove)    #n是类变量,是123,虽然类变量也有name,但是实例本身的name优先级更高
print('r2:',r2.n,r2.name)   #r2.n不变,因为前面只是改变了r1的n,属于实例变量
print(Role.n)
Role.n = 'abc'
print(r1.n,r2.n)     #r1.n,仍然是实例变量优先,但r2.n是改变的,因为没有实例变量
r1.n_list.append('from r1')
r2.n_list.append('from r2')
print(r2.n_list)   #n_list 共用内存地址,所以列表是改谁都全改
print(r2.money,r2.weapon)  #r1.weapon 已经删除
#print(r1.__life_vaule)     #私有属性,不能直接调用,会报错
print(r1.show_status())    #私有属性,只有定义才能看见
原文地址:https://www.cnblogs.com/bbgoal/p/11685226.html