python学习对象
Posted 鸡蛋JD
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习对象相关的知识,希望对你有一定的参考价值。
对象= 属性+方法
创建一个类对象
class Turtle: # Python 中的类名约定以大写字母开头 """关于类的一个简单例子""" #属性 color = ‘green‘ weight = 10 legs = 4 shell = True mouth = ‘大嘴‘ # 方法 def climb(self): print(‘我正在努力的向前爬...‘) def run(self): print(‘我正在飞快地跑...‘) def bite(self): print(‘咬死你‘) def eat(self): print(‘有的吃‘) def sleep(self): print(‘睡了‘)
>>> tt = Turtle()
>>> tt.climb()
我正在努力的向前爬...
>>> tt.bite()
咬死你
>>> tt.sleep()
睡了
OO的特征(object oriented面向对象)
封装 信息隐蔽技术
继承 子类自动共享父类之间的数据和方法的机制
>>> class MyList(list): pass >>> list2 = MyList() >>> list2.append(5) >>> list2.append(3) >>> list2.append(7) >>> list2 [5, 3, 7]
list2继承了list函数的所有方法
多态 不同对象对不同方法响应不同的行动
>>> class A: def fun(self): print(‘我是A‘) >>> class B: def fun(self): print(‘我是B‘) >>> a = A() >>> b = B() >>> a.fun() 我是A >>> b.fun() 我是B
self是什么?
相当于C++的this指针
同一个类可以生成无数对象,对象调用方法,对象名会传给self,方法里的self就会替换成该对象
>>> class Ball: def setName(self, name): self.name = name def kick(self): print(‘我叫%s‘% self.name) >>> a = Ball() >>> a.setName(‘球A‘) >>> b = Ball() >>> b.setName(‘球B‘) >>> c = Ball() >>> c.setName(‘土豆‘) >>> a.kick() 我叫球A >>> c.kick() 我叫土豆
name mangling名字重造
私有函数变量:在名字前加两个下划线
>>> class Person: __name = ‘xiao‘ def getName(self): return self.__name
无法使用XX.__name调用这个对象的name,只能间接用内部方法调用出名字,达到隐藏内部变量的目的,但是其实只是改成XX._Person_name
继承
class DerivedClassName(BaseClassName):
class 子类名(父类名):
>>> class Parent: def hello(self): print("调用父类方法") >>> class Child(Parent): pass >>> p = Parent() >>> p.hello() 调用父类方法 >>> c = Child() >>> c.hello() 调用父类方法
如果子类中定义与父类同名的方法属性,则会覆盖
解决办法
1,调用未绑定的父类方法
class Shark(Fish): def __init__(self): Fish.__init__(self) #调用父类 self.hungry = True
2,使用super函数更好
class Shark(Fish): def __init__(self): super().__init__() #使用super函数 self.hungry = True
多重继承,继承父类的方法和属性
class 子类名(父类1,父类2,...)
以上是关于python学习对象的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段