Python 面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的值


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()不在类中, 所以需要自己把参数传入.

 

 

面向对象的特性

  • 封装
    • 对象和类概念的主要特性
    • 把客观事物封装成抽象的类, 并且类可以把自己的数据和方法只让可信的类或对象操作, 对不可信的进行信息屏蔽.
  • 继承
    • 可以使用现在类的所有功能, 并在无需重新编写原来类的情况下对这些功能进行扩展.
    • 通过继承创建的新类称为"子类"或"派生类".
    • 被继承的类称为"基类". "父类"或"超类".
    • 继承的过程, 就是从一般到特殊的过程.

以上是关于Python 面向对象的主要内容,如果未能解决你的问题,请参考以下文章

python之路之前没搞明白4面向对象(封装)

Python面向对象学习之八,装饰器

python:第二部分:面向对象:面向对象object orinted

Python 面向对象

面向面试编程代码片段之GC

面向对象编程其实很简单——Python 面向对象(初级篇)