zoukankan      html  css  js  c++  java
  • Python 面向对象(二)

     

    类 ==> 实例化 ==> 实例对象

    __init__ 构造函数

    self.name = name # 属性, 成员变量

    def sayhi() # 方法, 动态属性

    def get_heart(self):

      return self.__heart # 提供对外访问接口, 但是外部只能获取其值,不能改变其值.

    属性

    • 公有属性
      • 当所有属于本类的对象都能访问的属性称为公有属性(即全局属性, 在类中定义的, 而不是在某一个方法<包括构造方法>中定义的 ? 不对吧, java中全局变量也可以私有化的, 只是看有没有private修饰而已).
    • 私有属性
      • __private_attr_name = value
      • 强制访问私有属性方法: 实例对象_类名__属性名

    面向对象的特性

    • 封装
      • 对象和类概念的主要特性
      • 把客观事物封装成抽象的类, 并且类可以把自己的数据和方法只让可信的类或对象操作, 对不可信的进行信息屏蔽.
    • 继承
      • 可以使用现在类的所有功能, 并在无需重新编写原来类的情况下对这些功能进行扩展.
      • 通过继承创建的新类称为"子类"或"派生类".
      • 被继承的类称为"基类". "父类"或"超类".
      • 继承的过程, 就是从一般到特殊的过程.
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    
    class Role(object):
        nationality = "JP"
    
        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
            self.__heart = "Normal"  # 私有属性, 对外不可见(相当于java的private)
    
        def shot(self):
            print("%s is shooting" % self.name)
            self.__heart = "Dead"
            print(self.__heart)  # 私有属性可以内部访问
    
        def get_heart(self):
            return self.__heart  # 提供对外访问接口, 但是外部只能获取其值,不能改变其值.
    
        def got_shot(self):
            print("ah... i got shot...")
    
        def buy_gun(self, gun_name):
            print("just bought %s" % gun_name)
            self.weapon = gun_name  # 这样如果买了什么新武器, 也会同步更新属性weapon的值
    
        def __del__(self):   # 程序的收尾工作. 比如可以关掉一些文件,清除一些链接等.
            print("del...run...")
    
    
    r1 = Role('Alex', 'police', 'AK47')  # 生成一个角色
    r2 = Role('Jack', 'terrorist', 'B22')  # 生成一个角色
    
    r1.shot()
    r2.buy_gun('AK47')
    print(r2.weapon)  # 在buy_gun()方法中添加self.weapon = gun_name, 这样若购买了新的武器, 就能更新属性weapon的值
    
    # print(r1.get_heart())
    print(r1._Role__heart)  # 外部强行访问一个私有属性
    
    # 更改类的公有属性有两种方法
    Role.nationality = "US"  # 方法1. 所有对象的nationality值都会被更改.
    r1.natiocnality = "Thailand"  # 方法2.     只有对象r1的nationality值会被更改.
    
    
    def shot2(self):  # 在类中, 直接调用方法, 会自动把实例对象传入方法. 在类外面的方法, 需要自己把实例传入方法.
        print("my own shot method")
    
    
    r1.shot = shot2
    r1.shot(r1) # 调用的其实是shot2()方法. 因方法shot2()不在类中, 所以需要自己把参数传入.
    
    
    del r1  # 清除实例r1. 注意: 内存没有删, 只是删除了内存的引用关系(相当于标识该实例不用了, 稍后自动回收机制会真正清除该实例).
  • 相关阅读:
    HDU 3564 Another LIS
    POJ 2104 K-th Number
    HYSBZ 1901 Dynamic Rankings
    HYSBZ 4321 queue2
    HYSBZ 3991 寻宝游戏
    工作中使用到的的MonogoDB查询语句记录。
    工作中使用到的的MySQL查询语句记录。
    python对文本文件的读写操作
    WRK的使用-lua脚本POST请求(静态数据)
    WRK的使用-lua脚本GET请求
  • 原文地址:https://www.cnblogs.com/cheese320/p/9165466.html
Copyright © 2011-2022 走看看