class 的三大特性

封装:内部调用对于外部用户是透明的

继承: 在分类里的属性,方法被自动继承

多态:调用这个功能,可以使多个类同时执行

r1 = Role(r1, 'Alex', 'Police', '15000') #实际上把r1赋给了self

self.name = 'Alex' # r1.name = 'Alex'

self.role = 'Police' # r1.role = 'Police'

self.money = 15000 # r1.money = 15000

r1.buy_guy()  # Role.buy_guy(r1)

第一个例子 (建立一个简单的类)

class Dog:

def __init__(self, name):

self.name = name

def bulk(self):

print(‘%s : wa wa’%self.name)

dog = Dog('xiaoming')

dog.bulk()

第二个例子  #建立游戏角色 (封装) 私有属性,私有函数

class Role(object):

n = 123                 #类变量

name = 123

def __init__(self, name, role, weapon, life_value = 100, money = 20000) :

self.name = name            #实例变量

self.role = role

self.weapon = weapon

self.__life_value = life_value #函数的私有属性,外部不可以更改,只限于内部调用,可以打印出来

self.money  = money

def __shot(self):   # 私有函数,外部不可调用

print('shoting')

def got_shot(self):

self.__life_value -= 50

def buy_gun(self):

print('%s buy %s'%(self.name, self.weapon)

def show_status(self):
             print('name : %s weapon : %s life_value %s‘%(self.name, self.weapon, self.__life_value))

r1 = Role('alex', 'Police', 'AK47') # 创建Role的实例

r1.name = 'xiaoming' #更改实例变量的name

del r1.name #删除实例变量的name

del r1 #删除实例r1

print(r1.n)  #输出结果123   实例中没有该变量就去找类变量

print(r1.name)  #输出结果 alex  实例中有该变量就用实例中的变量

r1.got_shot()

r1.show_status()

第三个例子,创建学校 (继承)

class School(object):
    def __init__(self, name, addr):
         self.name = name
         self.addr = addr
         self.student = []
         self.teacher = []
    def enroll(self, stu):     #招收学生
         print('you have been enrolled')
         self.student.append(stu)
    def hire(self, teac):      #招收老师
         print('you have been hired')
         self.teacher.append(teac)

class SchoolMember(object):
     def __init__(self, name, age):
         self.name = name
         self.age = age

def tell():
          pass

class Student(SchoolMember):  #继承SchoolMember
      def __init__(self, name, age, stu_id, grade):  #继承的函数,其变量也需要写在里面
          super(Student, self). __init__(name, age)   #=SchoolMember.__init__(name, age)
          self.name = name
          self.age = age
          self.stu_id = stu_id
          self.grade = grade
      def tell(self):
          print('''
          name : %s
          age : %s
          stu_id : %s
          grade : %s'''%(self.name, self.age, self.stu_id, self.grade))
      def payment(self, number):
          print('%s need to pay %s money'%(self.name, number))

class Teacher(SchoolMember):
      def __init__(self, name, age, salary, course):
          super(Teacher, self) .__init__(name, age)
          self.name = name
          self.age = age
          self.salary = salary
          self.course = course
     def tell(self):
          print('''
            name : %s
            age : %s
            salary : %s
            course : %s'''%(self.name, self.age, self.salary, self.course))
      def teaching(self):
            print('%s is teaching %s'%(self.name, self.course))

stu1 = Student('成华', 23, 10001, 1000)   #创建学生的实例
tea1 = Teacher('小明', 22, 20000, 'python') #创建老师的实例

stu1.tell()
stu1.payment(20000)

sc1 = School('oldboy', '沙河')   #创建学校1

sc2 = School('幼儿园', '天河')   #创建学校2

sc1.enroll(stu1) #把stu1实例存储在sc1.student里面,可以实现sc1 与 stu1 的关联

sc2.hire(tea1) #把tea1实例存储在sc1.teacher里面,可以实现sc2 与 tea1 的关联

print(sc1.student[0].name) # 等价于 stu1.name

print(sc2.teacher[0].name) #等价于 tea1.name

第四个例子(多态) 一个接口多种实例形态

#通过animal_talk一个接口 可以实现多种动物的叫声

class Animal(object):
     def __init__(self, name):
         self.name = name
     def eat(self):
          print('%s is eating'%self.name)
     def sleep(self):
          print('%s is sleeping'%self.name)
     @staticmethod #不需要创建实例
     def animal_talk(obj): #实例作为参数
          obj.talk() #如果传入cat,等价于调用了cat.talk()

class Cat(object):
      def __init__(self, name):
           self.name = name
      def talk(self): #相同的函数名
           print('%s miaomiao'%self.name)

class Dog(object):
       def __init__(self, name):
           self.name = name
       def talk(self): #相同的函数名
            print('%s wawa'%self.name)

cat = Cat('淑华')
dog = Dog('小花')
Animal.animal_talk(cat) #cat为传入的类
Animal.animal_talk(dog) #dog为传入的类

class(类的使用说明)的更多相关文章

  1. AutoResetEvent 类的使用说明

    AutoResetEvent 类 官方描述:通知正在等待的线程已发生事件 命名空间:System.Threading 程序集:mscorlib 继承于:System.Threading.WaitHan ...

  2. 【jpeg_Class 类】使用说明

    jpeg_Class类是针对图片操作类,可以获取图片属性.等比例缩略图片.裁切图片.图片上打印文字及打印水印等功能. 目录 原型 参数 返回 说明 Sub load(byVal path) path ...

  3. 【xml_Class、xmlElementNode_Class 类】使用说明

    xml_Class.xmlElementNode_Class这两个类是针对XML相关操作的类. 1.xml_Class类是针对XML文档操作的类 目录: 类型 原型 参数 返回 说明 Sub Sub ...

  4. 【paging_Class 分页类】使用说明

    类名:paging_Class 说明:分页类 注意: 1) 支持百万级数据分页 2) 支持多种类型的SQL语法,比如 Left Join 等. 3) 自动保存查询中的错误情况,记录保存在:/Cache ...

  5. 【outPut_Class 输出类】使用说明

    对象:outPut 说明:定义输出结果类的相关操作.此对象的核心是[JSON]类,所以它继承了[JSON]类的所有方法 重要: 输出结果样式为XML时,自带根节点"root".输出 ...

  6. String类的使用说明

    (1)Length()取一个字符串的长度:public int length(); public calss StringLength1{ public static void main(String ...

  7. 【xmlHttp_Class 远程访问类】使用说明

    类名:xmlHttp_Class 说明:远程获取外部网站数据信息或执行一个外部网站程序 目录: 类型 名称 参数 返回 说明 属性 [必需] [xmlHttp].url = [urlString] - ...

  8. 【JSON类】使用说明

    理解键名路径 键名路径(keyPath)用于定位json的键,比如:{book: {title:”中国人”} },键名路径 book.title 表定位到book下的title键. 对于值是数组类型的 ...

  9. 基于RTP的H264视频数据打包解包类

    from:http://blog.csdn.net/dengzikun/article/details/5807694 最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打 ...

随机推荐

  1. stty(set tty)

    tty [ -a ] [ -g ] [ Options ]   stty(set tty)命令用于显示和修改当前注册的终端的属性. UNIX系统为键盘的输入和终端的输出提供了重要的控制手段,可以通过s ...

  2. Javascript 严格模式下几个禁忌

    禁止使用未声明的变量. 禁止删除变量或对象 禁止删除函数 禁止使用八进制 禁止对只读属性赋值 禁止对一个使用getter方法读取的属性进行赋值 禁止删除一个不允许删除的属性 变量名禁止使用 " ...

  3. Centos下LNMP安装

    安装nginx [root@xuegod64 ~]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl open ...

  4. ElementUI 知识点

    类型是number的el-input 去掉滚轮事件: @mousewheel.native.prevent <el-input type="number" @mousewhe ...

  5. 字符设备之register_chrdev与register_chrdev_region(转)

    之前写字符设备驱动,都是使用register_chrdev向内核注册驱动程序中构建的file_operations结构体,之后创建的设备文件,只要是主设备号相同(次设备号不同),则绑定的都是同一个fi ...

  6. java编译需要文件后缀名.java 而运行不需要后缀名.class

    对于java源文件HelloWorld.java编译命令:javac HelloWorld.java运行命令:java HelloWorld 编译需要文件后缀名.java 而运行不需要后缀名.clas ...

  7. golang fmt用法举例

    下标与参数的对应 例子如下: package main import ( "fmt" ) func main() { num := 10 fmt.Printf("num: ...

  8. ask 调用时间标签

    织梦时间调用标签大全(2012-08-03 12:50:13) 转载▼   分类: 织梦 织梦首页时间标签1,11-20 样式([field:pubdate  function='strftime(& ...

  9. php语言介绍分析

    1,胡说八道 php设计专门用于web开发的编程语言,易学易用得到广泛应用的同时也饱受诟病,简单易学使得初学者用最短的时间很容易实现自己的WEB站点,且开源项目丰富,是中小型公司热衷的选择.但是,随着 ...

  10. [转]Windows服务“允许服务与桌面交互”的使用和修改方法

    上一篇文章是纯 C# 代码的形式勾上 “允许服务与桌面交互” 选项的 本文转载自:http://blog.csdn.net/lanruoshui/article/details/4756408 描述: ...