python之类的继承及方法讲解分析
#!/usr/bin/env python
#-*- conding:utf-8 -*- # class Person(object):
# def __init__(self,name,age):
# self.name = name
# self.age = age
#
# def getName(self):
# return self.name
#
# def getAge(self):
# return self.age
#
# def setName(self, name):
# self.name=name
#
# def setAge(self,age):
# self.age=age
#
# def info(self):
# return "name{0},age{1}".format(self.name,self.age)
# per = Person("Teacher",24)
# per.info()
# print(per.info()) """
首先一个类,不管是否写了构造函数,它都是有构造函数的
一个类,可以有多个构造函数,建议一个类只有一个构造函数
构造函数
1.初始化属性
"""
# class Person1(object):
# #动态方法
# def __init__(self,*args,**kwargs):
# self.args = args
# self.kwargs = kwargs
#
# def info(self):
# # print("信息:",self.kwargs)
# print("信息:",self.args)
#
# per1 = Person1(name="Teacher",age=24)
# per1 = Person1("Teacher",26)
# per1.info()
# per1.info() """
析构函数
对象实例化-->构造函数-->对象调用方法-->代码跳转到具体的方法
-->执行方法的代码块-->最后执行析构函数
"""
# class Person(object):
# def __init__(self):
# print("我是构造方法")
#
# def __del__(self):
# print("我是析构方法")
#
# def info(self):
# print("我是方法")
#
# per = Person()
# per.info()
# """
普通方法
"""
# class Person2(object):
# def conn(self,user,passwd,host,port):
# pass
#
# def f1(self,*args,**kwargs):
# # self.kwargs = kwargs
# # self.args = args
# pass
#
# def info(self):
# print("我是普通方法")
#
# per = Person2()
# per.conn("root",123456,"localhost",3306)
# per.info() """
特性方法:不能有形式参数
"""
# class Person(object):
#
# @property #装饰器
# def getUserID(self):
# pass
#
# per = Person()
# per.getUserID #不加(),加()报错 # from selenium import webdriver
# driver = webdriver.Firefox()
# driver.find_element_by_id("kw").text """
静态方法:
可以直接使用类名来调用方法,属于类
实例对象也可以调用方法,但不建议使用,多此一举!
"""
# class MySQL(object):
# @staticmethod
# # 方法参数不用加self
# def conn(user):
# pass
#
# # MySQL.conn("Teacher")
# sql = MySQL()
# sql.conn("Teacher") """
类的方法:直接使用类名来调用
"""
# class MySQL(object):
# @classmethod
# # 方法参数不用加self
# def conn(cls):
# pass
#
# # MySQL.conn("Teacher")
# MySQL.conn() """
属于类:
类属性
静态方法
类方法
属于对象:
实例属性
普通方法
特性方法
""" """
类的继承:重复使用已经存在的数据和行为,减少重复编写代码,
子类继承父类的实例属性和方法
"""
"""类属性的继承"""
# class Person(object):
# China = "中国"
# class UsaPerson(Person):
# pass
# Usa = UsaPerson()
# Usa.China
# print(Usa.China) """实例属性的继承与继承的两种写法"""
# class Fruit(object):
# def __init__(self,name):
# self.name = name """子类由于业务的需求,需要继承父类的实例属性""" # class Apple(Fruit):
# def __init__(self,name,brand,color):
# # super(Apple,self).__init__(name)
# Fruit.__init__(self,name)
# self.brand = brand
# self.color = color
#
# def info(self):
# return "名称{0},品牌{1},颜色{2}".format(self.name,self.brand,self.color)
#
# app = Apple("苹果","富士","红色")
# app.info()
# print(app.info()) # class Fruit(object):
# def __init__(self,name):
# self.name = name
"""子类由于业务的需求,不需要继承父类的实例属性""" # class Apple(Fruit):
# def __init__(self,brand,color):
# self.brand = brand
# self.color = color
#
# def info(self):
# return "品牌{0},颜色{1}".format(self.brand,self.color)
#
# app = Apple("富士#","红色")
# app.info()
# print(app.info()) """格式化字符"""
#"{a} Love {b}.{0}".format(a = "I",b = "You","com")
"{0} Love {a}.{b}".format("I",a = "You",b = "com") """
方法的继承:
子类为什么要重写父类的方法?子类有自己的特性
当子类重写了父类的方法,对子类进行实例化对象后,
子类调用的(父类,子类方法都存在)方法,执行的方法是子类的方法 """
# class Person(object):
# def eat(self):
# print("人需要吃饭的")
#
# class Son(Person):
# def __init__(self,name):
# self.name = name
#
# def eat(self):
# print("名字是{0},为什么?".format(self.name))
#
# son = Son("Teacher")
# son.eat() """
单个类继承的原则:
1.从上到下,子类继承父类,但没有重写父类的方法,
对子类进行实例化对象后,执行调用是直接父类中的方法
2.从下到上,子类继承父类,但子类重写父类的方法,
对子类进行实例化对象后,执行调用是直接子类中的方法(优先调用自己方法)
""" # class Fruit(object):
# def eat(self):
# print("水果是用来吃的")
#
# class Apple(Fruit):
# def __init__(self,color):
# self.color = color
#
# def eat(self):
# print("苹果的颜色{0},该吃掉了!".format(self.color))
#
# class Band(Apple):
# def eat(self):
# print("我是Apple的子类")
#
# band = Band("红色")
# band.eat() # class Person(object):
# def __init__(self,name):
# self.name=name
#
# def info(self):
# print (self.name)
#
# class Son(Person):
# def info(self):
# print (self.name)
#
# s=Son('name')
# s.info()
# """多个继承:执行的顺序,从左到右执行;并且是同一级别的!同一级别指的是共同的类""" # class Person(object):
# def eat(self):
# print("人是吃饭的")
#
# class Monther(Person):
# # def eat(self):
# # print("妈妈不吃饭,要减肥")
# pass
#
# class Father(Person):
# def eat(self):
# print("爸爸吃饭!")
#
# class Son(Monther,Father):
# pass
#
# son = Son()
# son.eat() """__doc__ 打印出类的注释""" # class Person(object):
# """人的属性&特性"""
# def info(self,username,password):
# """
# :param username: 参数用户名
# :param password: 参数密码
# :return:
# """
# pass
#
# per = Person()
# print(per.__doc__) """__call__:对象创建时直接返回__call__的内容,使用该方法可以模拟静态方法""" # class Per(object):
# def __new__(cls, *args, **kwargs):
# print("打印出call方法")
#
# per = Per() """
__str__:对象代表的含义,返回一个字符串,通过他可以把字符串和对象关联起来,方便某些程序的实现
该字符串表示某个类,实现__str__后,可以直接使用print语句打印出对象,也可以通过str来触发__str__来执行
__str__:
1.对象的意思
2.返回一个字符串,对象和字符串关联起来 -->该字符串可表示一个类
"""
# class Per(object):
# """我是一个字符串类"""
# def __str__(self):
# return self.__doc__
#
# per = Per()
# print(str(per)) class Factory(object):
def createFruit(self,fruit):
if fruit == "apple":
return Apple()
elif fruit == "banana":
return Banana() class Fruit(object):
def __str__(self):
return "fruit" class Apple(object):
def __str__(self):
return "apple" class Banana(object):
def __str__(self):
return "banana" if __name__ == '__main__':
factory = Factory()
print(factory.createFruit("apple"))
print(factory.createFruit("banana")) """工厂设计模式在UI中的应用"""
from selenium import webdriver
from appium import webdriver
from selenuim.webdriver.support.expected_conditions import NoSuchElementException
from selenium.webdriver.common.by import By class Factory(object):
def createWebDriver(self,WebDriver):
if WebDriver == "web":
return WebUI(self.driver)
elif WebDriver == "app":
return AppUI(self.driver) class WebDriver(object):
def __init__(self,webdriver):
self.webdriver = webdriver def __str__(self):
return "WebDriver" def findElement(self,*loc):
try:
return self.driver_find_element_By(*loc)
except NoSuchElementException as e:
print("Error details:%s",e.args[0]) def findElements(self,*loc):
try:
return self.driver_find_element_By(*loc)
except NoSuchElementException as e:
print("Error details:%s",e.args[0]) class WebUI(WebDriver):
def __str__(self):
return "web" class AppUI(WebDriver):
def __str__(self):
return "app" if __name__ == '__main__':
factory = Factory()
print(factory.createFruit("web"))
print(factory.createFruit("app"))
python之类的继承及方法讲解分析的更多相关文章
- Python单元测试框架unittest使用方法讲解
这篇文章主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容,需要的朋友可以参考下 概 ...
- Python:generator的send()方法流程分析
先来一个简单地例子: def foo(): print('starting') while True: r = yield 2 print(r) f = foo() print(f.send(None ...
- Javascript中,实现类与继承的方法和优缺点分析
Javascript是一种弱类型语言,不存在类的概念,但在js中可以模仿类似于JAVA中的类,实现类与继承 第一种方法:利用Javascript中的原型链 //首先定义一个父类 function An ...
- python面向对象-4类的继承与方法的重载
1.类的继承与方法的重载 上面就是先定义了一个类A,然后由定义了一个类B,B继承了类A,这样B就有了A的非私有属性和方法. class Washer: company='ZBL' def __init ...
- python 从SocketServer到 WSGIServer 源码分析、
python 下有个wsgi的封装库.wsgiref. WSGI 指的是 Web服务器网关接口(Python Web Server Gateway Interface) django的runserve ...
- python 面向对象之继承与派生
一:初识继承 1,什么是继承? 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题 继承是一种创建新类的方式,在python中,新建的类 ...
- Python基础之继承与派生
一.什么是继承: 继承是一种创建新的类的方式,新建的类可以继承一个或过个父类,原始类成为基类或超类,新建的类则称为派生类 或子类. 其中,继承又分为:单继承和多继承. class parent_cla ...
- Python之面向对象继承和派生
Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...
- python面向对象的继承-组合-02
*面向对象(OOP)的三大特征:**# 封装.继承.多态 继承 什么是继承 继承:# 是一种关系,描述两个对象之间什么是什么的什么的关系 例如:麦兜.佩奇.猪猪侠.猪刚鬣,都是猪 为什么要使用继承 继 ...
随机推荐
- jsp学习之如何在web层创建Servlet
jsp动态网页的文件目录结构如下: 1.src下存放java代码 2.包web_xx为web层 3.webcontent里面是jsp文件 jsp页面中的请求交付给servlet处理,在实际中 jsp的 ...
- Leetcode 211.添加与搜索单词
添加与搜索单词 设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字 ...
- 【转】Selenium专题—JQuery选择器
juqery选择器是jquery库中非常重要的功能.jquery选择器是基于CSS1-3选择器,加上一些额外的选择器.这些选择器和CSS选择器的使用方法很相似,允许开发人员简单快速的识别页面上的元素. ...
- Linux下汇编语言学习笔记62 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- BZOJ——2190: [SDOI2008]仪仗队
思路: 我们将其所在的位置设为(0,0),那么如果存在一个点(x,y),且有gcd(x,y)=k(k!=1),那么点(x/k,y/k)一定会将(x,y)挡住.而如果k=1,那么点(x,y)就一定会被看 ...
- 【SQL Server 学习系列】-- 随机生成日期时间的SQL脚本
DECLARE @dt1 DATETIME,@dt2 DATETIME,@a BIGINT,@b BIGINT SET @dt1='2010-01-01'--开始日期 SET @dt2='2010-0 ...
- 使用NPOI将DataTable生成Excel
听闻npoi 2.0版本支持excel2007格式了,表示期待其表现.不过目前还是使用1.2.5稳重点. 生活中有太多的列表都需要一个导出功能,当然这里的生活指的的程序员的生活.DataTable是从 ...
- mvn打包源码的方法:maven-source-plugin
maven-javadoc-plugin可以打包 dubbo-demo-provider-2.6.1-javadoc.jar maven-jar-plugin 打包插件 dubbo-demo-prov ...
- CodeIgniter 向mysql插入数据包括字母、汉字问题
今天在使用ci框架,须要向mysql数据表插入数据.当中的一个字段包括汉字.字母.但是用传统的使用sql语句:insert into XXX这样的方式,不管怎样都插入不成功,最后我换了还有一种方式: ...
- 斜率优化专题1——bzoj 1597 [Usaco2008 Mar] 土地购买 题解
转载请注明:http://blog.csdn.net/jiangshibiao/article/details/24387147 [原题] 1597: [Usaco2008 Mar]土地购买 Time ...