哗啦啦Python之路 - Day 8 - 多态,类成员,单例模式,异常处理

1. 多态(多种类型)

多态的体现如下:

    def func(arg):
        print(arg)
    func(1)
    func("alex")
    func([11,12,13])
    #func可以是任何东西
    #但是对于C#,java都不是这样,参数必须要指定类型

多态的缺点:在缺少注释的情况下,不知道arg是什么类型,它有什么用处。比如说如果确定好是个list的话,那就可以append()。但是不确定的时候就不知道怎么用了。

2. 面向对象中的类成员

1) 字段

  - 静态字段: 代码加载时已经创建,属于类

  - 普通字段: 有对象才有这个,属于对象

class Province:
    country = "中国" #静态字段,保存在类里面
    def __init__(self,name):
        self.name = name #保存在对象里,这是普通字段,如果没有调用这个函数,那么这个就不在内存里

2) 方法(属于类)

  - 普通方法: 定义必须有self,通过对象执行

  - 静态方法: @staticmethod,去掉self,参数可有可无,由类执行

  - 类方法: @classmethod,静态方法的一种特殊形式。自动传类参数,由类执行

class Province:
    def __init__(self,name):
        self.name = name
    def show(self): #普通方法
        print(self.name)
    @staticmethod #静态方法,1.加这个,2.去掉self,3.参数可有可无
    def f1(arg1):
        print(arg1)
    @classmethod #类方法,必须要有参数
    def f2(cls):#这个参数是自动传递的,是类名。静态方法的一种。
        print(cls)
    def f3(self):
        return self.name[1]

# #方法是由对象调用的
# obj = Province("河南")
# obj.show()
# #普通方法由对象去调用执行(方法属于类)
# Province.f1(111)#静态方法,只跟类有关,不需要对象,由类调用,跟函数一样的
# Province.f2()#类方法,参数是类名
# obj = Province("alex")
# ret = obj.f3()
# print(ret)
时间: 2024-10-07 06:35:58

哗啦啦Python之路 - Day 8 - 多态,类成员,单例模式,异常处理的相关文章

哗啦啦Python之路 - Day 1

金融专业出身的人,产生学Python的想法是源于看到通联网络上分享的量化分析师之路. 矿工一直是我的梦想,然而从,c++什么的上手有点难,仿佛想借把锄头挖矿结果从造锄头开始学.相对而言,简单易读易上手的python自然成了不二之选. 于是开始了我的Python之路. Day 1 第一天,自然是从python下载开始.2.7和3.5应该选哪个呢?唔,貌似选择的时候自然是越高版本越好了~哈哈开玩笑.选择3.5的原因当然是因为2.*日薄西山了嘛~~ 工欲善其事,必先利其器.所以下载pycharm或者p

python 面向对象和类成员和异常处理

python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial diameter),极直径(polar diameter)''' def __init__(self,name,eqDiameter,poDiameter): self.name=name self.eqDiameter=eqDiameter #赤道直径 self.poDiameter=poDiamet

哗啦啦Python之路 - 线程,进程,协程

1. 线程锁 如果不控制多个线程对同一资源进行访问的话,会对数据造成破坏,使得线程运行的结果不可预期.因此要引进线程锁. 线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁. 互斥锁为资源引入一个状态:锁定/非锁定.某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改:直到该线程释放资源,将 资源的状态变成“非锁定”,其他的线程才能再次锁定该资源.互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性. 未引入锁前: impo

哗啦啦Python之路 - Day 9 - socket

1. socket是什么 Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作. socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: file模块

哗啦啦Python之路 - Day 3 - 列表和元组

序列和元组 1. 区别: 序列能修改,元组不行 2. 列表写法: user = ['Fiona', 18] user2 = ['Lala', 19] database = [user, user2] print(database) output: ['Fiona', 18],['Lala', 19] 3. 数据结构:container(容器),可以包含其他对象的任意对象.序列(列表和元组)和映射(比如字典)是两种主要的容器. 4. 索引 (indexing): - 所有元素都是有编号的,从0开始

哗啦啦Python之路 - sqlalchemy/paramiko/堡垒机

I. SQLalchemy联表操作 1. 一对多 class Group(Base): # 一对多的表,组中可能包含多个用户 __tablename__ = 'group' nid = Column(Integer, primary_key=True, autoincrement=True) caption = Column(String(32)) class User(Base): __tablename__ = 'user' uid = Column(Integer, primary_key

哗啦啦Python之路 - Day 6 - 三种基础排序,递归,反射,模块

1. 三种排序方式 - 冒泡排序:两两比较,大的排右边,每次冒出去一个泡 m = [1,2,6,5,4] for i in range(len(m)): for j in range(i): if m[j] > m[j+1]: m[j],m[j+1] = m[j+1],m[j] print(m) - 选择排序 对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换:然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与K2对换.

哗啦啦python之路 - Day 2 - 程序控制结构

1. 程序流程图 2. if 结构 if score >= 90: print 'A' elif score >= 80: print 'B' elif score >= 70: print 'C' else: print 'D' 3. while 循环结构 count = 0 while count <5: print 'programming is fun!' count += 1 4. break和continue的用法 5. range使用方法 6. 用range算常数e

python开发面向对象基础:接口类&amp;抽象类&amp;多态&amp;多继承

一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 开发中容易出现的问题 1 class Alipay: 2 ''' 3 支付宝支付 4 ''' 5 def pay(self,money): 6 print('支付宝支付了%s元'%money) 7 8 class Applepay: 9 ''' 1