python自动化开发实战经典_Python自动化开发从浅入深-语言基础(类)

一、类对象和实例对象:

类对象提供默认行为,它是实例对象的工厂。实例对象是程序处理的实际对象,它们各自有独立的命名空间。类对象来自于语句,而实例来自于调用,每次调用一个类,就会得到这个类的新的实例。

执行class语句,就会得到类对象。

class :

类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象

例子:

#!/usr/bin/env python

classtest(object):defa(self,b):print(b)returnb

c= test().a('Hello World!')

运行结果

Hello World!

test().a('Hello World')调用类test(注意:小括号)会产生实例对象,即可以读取所定义类属性的命名空间。

类的私有属性:

__private_attrs  两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs

类的方法:

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

私有的类方法:

__private_method 两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用slef.__private_methods

#!/usr/bin/env python

classtest(object):__c = '私有变量'

def __d(self):print('私有方法')defa(self,b):print('在类方法里调用私有变量==》',self.__c)print(b)

self.__d()returnb#先打印"在类方法里调用私有变量==》 私有变量"#再打印"Hello World!"#最后打印“私有方法”

c = test().a('Hello World!')#print('test().__c') #在外部不能调用私有变量#test().__d() #在外部不能调用私有方法

类的专有方法:

在类的定义中,一般用__init__进行初始工作(构造),而在__del__中完成删除工作(析构) 。

__new__用于定制类的创建过程。

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

#!/usr/bin/env python

class test(object):

__c = '私有变量'

def __init__(self):

self.Init_a = 'Init_a'

self.__private = 'private'

def __d(self):

print('私有方法')

def a(self,b):

print('在类方法里调用私有变量==》',self.__c)

print(b)

print(self.__private)

self.__d()

return b

#先打印"在类方法里调用私有变量==》 私有变量"

#再打印"Hello World!"

#最后打印“私有方法”

#加了一句,调用__init__中的私有变量,打印“”

c = test().a('Hello World!')

#print('test().__c') #在外部不能调用私有变量

#test().__d() #在外部不能调用私有方法

giveInit = test()

print(giveInit.Init_a)

#print(giveInit.__private) #在外部不能调用私有变量

运行结果

在类方法里调用私有变量==》 私有变量

Hello World!

private

私有方法

Init_a

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

class NewClass(object):

num_count = 0 # 所有的实例都共享此变量,即不单独为每个实例分配

def __init__(self,name):

self.name = name

NewClass.num_count += 1

print (name,NewClass.num_count)

def __del__(self):

NewClass.num_count -= 1

print ("Del",self.name,NewClass.num_count)

def test():

print ("aa")

aa = NewClass("Hello")

bb = NewClass("World")

cc = NewClass("I am come")

运行结果:

Hello 1

World 2

I am come 3

Del Hello 2

Del World 1

Del I am come 0

从上面例子中可以看出,连续建立了三个类的实例对象,先将构造函数执行完成,没有再执行构造时,开始逐步执行析构函数。

一些特殊的类属性。

classMyClass(object):"""This is MyClass's Docoment"""

def __init__(self):

self.i= 1234

>>>>>> MyClass.__doc__ #类型帮助信息

"This is MyClass's Docoment""This is MyClass's Docoment"

>>>>>> MyClass.__name__ #类型名称

'MyClass'

>>>>>> MyClass.__module__ #类型所在模块

'__main__'

>>>>>> MyClass.__bases__ #类型所继承的基类(Python 支持多继承)

(,)>>>>>> MyClass.__dict__ #类型字典,存储所有类型成员信息

>>>>>> #以下是实例拥有的属性

>>>>>> MyClass().__class__ #实例的类型

>>>>>> MyClass().__module__ #实例类型所在模块

'__main__'

>>>>>> MyClass().__dict__ #对象字典,存储所有实例成员信息

{'i': 1234}

__repr__      打印,转换

__setitem__ 按照索引赋值

__getitem__按照索引获取值

__len__       获得长度

__cmp__     比较运算

__call__      函数调用

__add__      加运算

__sub__      减运算

__mul__     乘运算

__div__      除运算

__mod__    求余运算

__pow__     乘方

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 #类定义

2 classpeople:3 #定义基本属性

4 name = ''

5 age =06 #定义私有属性,私有属性在类外部无法直接进行访问

7 __weight =08 #定义构造方法

9 def __init__(self,n,a,w):10 self.name =n11 self.age =a12 self.__weight =w13 defspeak(self):14 print("%s is speaking: I am %d years old" %(self.name,self.age))15

16

17 p = people('tom',10,30)18 p.speak()

View Code

二、继承类定义:

1.单继承

class (父类名)

class childbook(book)

age = 10

8f900a89c6347c561fdf2122f13be562.pngView Code

2.类的多重继承

class 类名(父类1,父类2,....,父类n)

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法

8f900a89c6347c561fdf2122f13be562.pngView Code

Python 支持多继承,但有几点需要注意:

-- 基类 __init__ / __del__ 需显示调用。

-- 继承方法的调用和基类声明顺序有关。

classBase1:def __init__(self):print "Base1"

deftest(self):print "Base1 test"

classBase2:def __init__(self):print "Base2"

deftest(self):print "Base2 test"

classMyClass(Base2,Base1):def __init__(self):

Base1.__init__(self)

Base2.__init__(self)print "MyClass"

>>>>>> a =MyClass()

Base1

Base2

MyClass>>>>>>a.test()

Base2 test>>>>>> #下面把 Base1 放在前面

classMyClass(Base1,Base2):def __init__(self):

Base1.__init__(self)

Base2.__init__(self)print "MyClass"

>>>>>> a =MyClass()

Base1

Base2

MyClass>>>>>>a.test()

Base1 test>>>>>>

(参照各类网站资料学习并整理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值