python允许无止境的循环_python基础

classTest:def __init__(self):

xxx

类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响

成员函数和普通函数的区别是:成员函数的第一个参数永远是self,且调用时不需要显示填入

访问限制:

一个下划线看头的变量和方法可以被访问,但是不建议访问

两个下划线开头的变量和方法不可以被访问,直接报错

两个下划线开头和两个下划线结尾的变量和方法是特殊的,有特殊用途

继承和多态:classBase:def def __init__(self):pass

deffunc(self):print("Base")classDrived(Base):def__ init__(self):

Base.__ init__()pass

deffunc(self):print("Drived")pass子类可以定义和父类相同的方法,此时叫复写,也可实现多态

可以使用Base.func()显式调用父类的同名方法

Python中没有方法重载,成员方法也是对象的属性,当方法名相同时,直接覆盖

获取对象信息:

type() 返回的是Class类型

type库中有很多常量,用于和type()的返回值做对比

types.FunctionType 自定义函数

types.BuiltinFunctionType 内建函数

types.LambdaType lambda表达式

...

isinstance() 判断继承关系

dir()函数获得一个对象的所有属性和方法,它返回一个包含字符串的list

类属性和实例属性:classTest:

xxx=yyy 类属性def __init__(self):

self.xxx 实例属性

调用类属性的方式:Test.xxx

给实例单独绑定的属性,只影响实例自身,不影响其它实例

限制给单个实例添加属性的方法:classTest():__slots__ = ('name', 'age') #用tuple定义允许绑定的属性名称

使用@propertyclassTest():

@property#设置属性

defname(self):returnself._name

@name.setter#设置setter

defname(self, other):print("setter")

self._name=otherif __name__ == '__main__':

t=Test()

t.name= "abc"

print(t.name)

功能:可以用于参数检查

经典类和新式类的区别在于:

经典类是默认没有派生自某个基类的,而新式类是默认派生自object这个基类的,Python3默认是新式类

经典类在类多重继承的时候是采用从左到右深度优先原则匹配方法的.而新式类是采用C3算法(不同于广度优先)进行匹配的

不建议使用多重继承

初始化的时候,建议使用super(),不建议使用 类名.__init__() 的方式

类中的一些特殊方法:__str__打印时调用,打印的内容就是函数的返回值__slots__限制给实例对象单独添加属性__len__执行len()函数时调用__iter__如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,

然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环classFib(object):def __init__(self):

self.a, self.b= 0, 1 #初始化两个计数器a,b

def __iter__(self):return self #实例本身就是迭代对象,故返回自己

def __next__(self):

self.a, self.b= self.b, self.a + self.b #计算下一个值

if self.a > 100000: #退出循环的条件

raiseStopIteration()return self.a #返回下一个值

__getitem__让类对象可以向访问列表的方式使用__getattr__当访问的类属性不存在时,就会调用该方法__call__() 直接对实例进行调用classStudent(object):def __init__(self, name):

self.name=namedef __call__(self):print('My name is %s.' %self.name)>>> s = Student('abc')>>> s() #self参数不要传入

My name isabc.

枚举类:

枚举类中,不应该存在key相同的枚举项(类变量)

不允许在类外直接修改枚举项的值

enum模块是系统内置模块,可以直接使用import导入#导入枚举类

from enum importEnum#继承枚举类

classcolor(Enum):

YELLOW= 1BEOWN= 1RED= 2GREEN= 3PINK= 4可以再class上加@unique,可以帮助我们检查保证没有重复值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值