美文网首页
通往死亡之路的python的笔记之类、方法、封装、继承及小实例

通往死亡之路的python的笔记之类、方法、封装、继承及小实例

作者: 码力 | 来源:发表于2017-09-28 14:03 被阅读0次

Python 类

Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。

对象可以包含任意数量和类型的数据。

python类与c++类相似,提供了类的封装,继承、多继承,构造函数、析构函数。

在python3中,所有类最顶层父类都是object类,与java类似,如果定义类的时候没有写出父类,则object类就是其直接父类。

类定义

类定义语法格式如下:

class ClassName:

.

.

.

类对象:创建一个类之后,可以通过类名访问、改变其属性、方法

实例对象:类实例化后,可以使用其属性,可以动态的为实例对象添加属性(类似javascript)而不影响类对象。

类的属性

可以使用点(.)来访问对象的属性

也可以使用以下函数的方式来访问属性:

getattr(obj, name[, default]) : 访问对象的属性

hasattr(obj,name) : 检查是否存在一个属性

setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性

delattr(obj, name) : 删除属性

Python内置类属性

__dict__ : 类的属性(包含一个字典,由类的数据属性组成)

__doc__ :类的文档字符串

__name__: 类名

__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)

__bases__ : 类的所有父类构成元素(包含了以个由所有父类组成的元组)

26classPerson:

"Person类"

def__init__(self, name, age, gender):

print('进入Person的初始化')

self.name=name

self.age=age

self.gender=gender

print('离开Person的初始化')

defgetName(self):

print(self.name)

p=Person('ice',18,'男')

print(p.name)# ice

print(p.age)# 18

print(p.gender)# 男

print(hasattr(p,'weight'))# False

# 为p添加weight属性

p.weight='70kg'

print(hasattr(p,'weight'))# True

print(getattr(p,'name'))# ice

print(p.__dict__)# {'age': 18, 'gender': '男', 'name': 'ice'}

print(Person.__name__)# Person

print(Person.__doc__)# Person类

print(Person.__dict__)# {'__doc__': 'Person类', '__weakref__': , '__init__': , 'getName': , '__dict__': , '__module__': '__main__'}

print(Person.__mro__)# (, )

print(Person.__bases__)# (,)

print(Person.__module__)# __main__

类的方法

在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数。

类的专有方法:

__init__ 构造函数,在生成对象时调用

__del__ 析构函数,释放对象时使用

__repr__ 打印,转换

__setitem__按照索引赋值

__getitem__按照索引获取值

__len__获得长度

__cmp__比较运算

__call__函数调用

__add__加运算

__sub__减运算

__mul__乘运算

__div__除运算

__mod__求余运算

__pow__称方

__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法,与c++中构造函数类似。只需在自定义的类中重写__init__()方法即可。

21classPerson:

def__init__(self, name, age, gender):

print('进入Person的初始化')

self.name=name

self.age=age

self.gender=gender

print('离开Person的初始化')

defgetName(self):

print(self.name)

# Person实例对象

p=Person('ice',18,'男')

print(p.name)

print(p.age)

print(p.gender)

p.getName()

# 进入Person的初始化

# 离开Person的初始化

# ice

# 18

# 男

# ice

析构函数 __del__ ,__del__在对象消逝的时候被调用,当对象不再被使用时,__del__方法运行:

方法

实例方法:只能通过实例调用,实例方法第一个定义的参数只能是实例本身引用

classMyclass:deffoo(self):print(id(self),'foo')对象的地址#结果地址一样

类方法:定义类方法,要使用装饰器@classmethod,定义的第一个参数是能是类对象的引用,可以通过类或者实例直用

classMyclass:

@classmethod#类装饰器deffoo2(cls):print(id(cls),'foo2')#类对象,直接可以调用,不需要实例化print(id(Myclass),'yy')

Myclass.foo2()#直接可以调用

静态方法:定义静态方法使用装饰器@staticmethod,没有默认的必须参数,通过类和实例直接调用

classMyclass:

@staticmethod#静态方法deffoo3():print('foo3')

Myclass.foo3()#没有参数a.foo3()#结果foo3

相关文章

网友评论

      本文标题:通往死亡之路的python的笔记之类、方法、封装、继承及小实例

      本文链接:https://www.haomeiwen.com/subject/cigmextx.html