Python (7)面向对象

Python3 入门专栏

http://blog.csdn.net/column/details/19679.html


Python 对象


  • python 支持面向对象编程,支持类、成员变量、成员方法、实例变量、实例化、继承这些概念;
  • python 的对象只支持类继承,并没有 Java 实现接口这种概念;
  • python 的继承机制:类允许多重继承,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法;

类定义和实例化


  • python 使用 class 关键字 定义一个类,并没有类访问权限关键字,一个类的在该类定义的模块中可以直接访问,在不同模块中只要引入该类定义的模块即可;

  • python class 中的变量和方法默认在全局范围内可以调用,如果要标记为私有变量和私有方法,只需要在变量或方法的命名前加__ 即可,如 __privateAttrName, __privateMethodName()

  • 在 python class 中的方法签名和普通的函数一样,不过在参数列表中,第一个参数必须是self

  • 在 python class 中,使用self 关键子来代表类的实例对象,类似于 Java 的 this 关键字,不同的是,python class 中没有静态变量这种概念;

以下是一个示例:
 
import hashlib
class User:
    # 类成员变量(公开)
    name = ""
    age = 0
    city = ""
    # 类成员变量(私有)
    __password = ""
    # 构造函数
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city
    # 类成员方法(公开)
    def set_passoword(self, passoword):
        self.__password = self.__encode_md5(passoword)
    def get_password(self):
        return self.__password
    # 类成员方法(私有)
    def __encode_md5(self,password):
        hash = hashlib.md5()
        hash.update(password.encode("utf-8"))
        return hash.hexdigest()
    # 打印方法,同 __repr__(),类似于 Java Object 的 toString() 方法
    def __str__(self):
        return "user:[name=%s ,age=%d, city=%s]" % (self.name, self.age, self.city)
# 实例化对象
user = User("assad", 20, "Guangzhou")
print(user)             # 输出: user:[name=assad ,age=20, city=Guangzhou]
# 访问类成员变量
print(user.name)        # 输出: assad
print(user.age)         # 输出: 20
# 调用类成员方法
user.set_passoword("2333")
print(user.get_password())   #输出:f7e0b956540676a129760a3eae309294

类的专有方法包括以下:
__init__:  构造函数,在生成对象时调用
__del__:  析构函数,释放对象时使用
__repr__ : 打印,转换
__str__:  同上
__setitem__ :  按照索引赋值
__getitem__:  按照索引获取值
__len__:  获得长度
__cmp__:  比较运算
__call__:  函数调用
__add__:  加运算
__sub__:  减运算
__mul__:  乘运算
__div__:  除运算
__mod__:  求余运算
__pow__:  乘方

运算符重载
python 支持运算符重载,通过重写类的以下专有方法即可实现对于类 +,-,* ,/,%,**  运算符的重载;
__add__:  加运算
__sub__:  减运算
__mul__:  乘运算
__div__:  除运算
__mod__:  求余运算
__pow__:  乘方



类继承

python 对于类继承的语法如下,支持多重继承;
 
class ChildClass(ParentClass):                # 单继承,子类 CildClass 继承基类 ParentClass
class ChildClass(PraentClass1,ParentClass2)  # 多继承,子类 CildClass 继承基类 ParentClass1,ParentClass2
子类完全继承父类的成员变量/成员方法(包括私有变量/方法),在子类中可以通过 super() 方法访问父类的成员变量/成员方法,在多继承中通过继承父类参数访问父类方法;

单继承示例
 
# 父类
class Animal:
    def __init__(self):
        print("animal init")
    def sound(self):
        print("animal:biubiubiu")
# 子类
class Cat(Animal):
    def __init__(self):
        super().__init__()  # 调用父类方法
        print("car init")
    def sound(self):       # 父类方法方法覆盖
        print("Cat:miaomiaomiao")
# 子类
class Dog(Animal):
    def __init__(self):
        print("dog init")
    def eat(self):         # 子类新增方法
        print("Dog eat bone")
cat = Cat()
cat.sound()
# 输出:
# animal init
# car init
# Cat:miaomiaomiao
dog = Dog()
dog.sound()
dog.eat()
# 输出:
# dog init
# animal:biubiubiu
# Dog eat bone

多继承示例
 
class Lover:
    def say(self):
        print("第一次有了喜欢的人")
class Friend:
    def say(self):
        print("有了能做一辈子朋友的人")
class Sprite(Lover,Friend):
    def say(self):
        Lover.say(self)
        Friend.say(self)
        print("两件快乐事情重合在一起。而这两份快乐,又给我带来更多的快乐。得到的,本该是像梦境一般幸福的时间……但是,为什么,会变成这样呢…… ")
sprite = Sprite()
sprite.say()
# 输出:
# 第一次有了喜欢的人
# 有了能做一辈子朋友的人
# 两件快乐事情重合在一起。而这两份快乐,又给我带来更多的快乐。得到的,本该是像梦境一般幸福的时间……但是,为什么,会变成这样呢……
# 所以白学家往死里打就对了





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值