python3 速查参考- python基础 8 -> 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)
基础概念
1.速查笔记:
#-- 最普通的类
class C1(C2, C3):
spam = 42 # 数据属性
def __init__(self, name): # 函数属性:构造函数
self.name = name
def __del__(self): # 函数属性:析构函数
print("goodbey ", self.name)
I1 = C1('bob') #-- Python的类没有基于参数的函数重载
class FirstClass:
def test(self, string):
print(string)
def test(self): # 此时类中只有一个test函数 即后者test(self) 它覆盖掉前者带参数的test函数
print("hello world") #-- 子类扩展超类: 尽量调用超类的方法
class Manager(Person):
def giveRaise(self, percent, bonus = .10):
self.pay = int(self.pay*(1 + percent + bonus)) # 不好的方式 复制粘贴超类代码
Person.giveRaise(self, percent + bonus) # 好的方式 尽量调用超类方法 #-- 类内省工具
bob = Person('bob')
bob.__class__ # <class 'Person'>
bob.__class__.__name__ # 'Person'
bob.__dict__ # {'pay':0, 'name':'bob', 'job':'Manager'} #-- 返回1中 数据属性spam是属于类 而不是对象
I1 = C1('bob'); I2 = C2('tom') # 此时I1和I2的spam都为42 但是都是返回的C1的spam属性
C1.spam = 24 # 此时I1和I2的spam都为24
I1.spam = 3 # 此时I1新增自有属性spam 值为2 I2和C1的spam还都为24 #-- 类方法调用的两种方式
instance.method(arg...)
class.method(instance, arg...)
2.学习笔记
面向对象:狗吃(屎)
面向过程:吃狗(屎)
类:具有共同特征和行为的一组对象的抽象定义。类相当于制造飞机的图纸,用它创建的飞机相当于对象。
类就是创建对象的模板。
3.类的创建中self的含义
# -*- coding:utf-8 -*-
class Test():
def __init__(self,name):
self.name=name try1 = Test('python') #当前调用class中方法的对象,此语句就是创建一个对象,对应类中定义的self
4. __init__方法讲解
# -*- coding:utf-8 -*-
class Test():
def __init__(self,name,age):#__init__在创建一个对象的时候,默认被调用,不需要手动调用
self.name = name #__init__(self)中,定义了两个形参,那么创建对象时需要传递两个实参
self.age = age #self参数,Python解释器会自动把当前的对象引用传递进去,不需要开发者传递 try1 = Test('python',12) #当前调用class中方法的对象,此语句就是创建一个对象,对应类中定义的self
5. __str__方法
# -*- coding:utf-8 -*-
"""
__str__定义在类内部,必须返回一个字符串类型
实例化不会触发__str__方法,但是打印的话就会触发
"""
class Test():
def __init__(self,name,age):
self.name = name
self.age = age def __str__(self):
return "name %s,age%d"%(self.name,self.age) try1 = Test('python',12)
print(try1)
类的属性
# -*- coding:utf-8 -*-
class test2():
name = wm #公共的类属性
__age = 18 #私有的类属性,只能在类的内部调用
def __init__(self,user,pw):
self.user = user
self.pw = pw
a = test2('python',20)
print(a.name)
print(a.__age) #会报错
静态方法和类方法
1. 速查笔记
#-- #实例方法 / 静态方法 / 类方法
class Methods:
def imeth(self, x): print(self, x) # 实例方法:传入的是实例和数据,操作的是实例的属性
def smeth(x): print(x) # 静态方法:只传入数据 不传入实例,操作的是类的属性而不是实例的属性
def cmeth(cls, x): print(cls, x) # 类方法:传入的是类对象和数据
smeth = staticmethod(smeth) # 调用内置函数,也可以使用@staticmethod
cmeth = classmethod(cmeth) # 调用内置函数,也可以使用@classmethod
obj = Methods()
obj.imeth(1) # 实例方法调用 <__main__.Methods object...> 1
Methods.imeth(obj, 2) # <__main__.Methods object...> 2
Methods.smeth(3) # 静态方法调用 3
obj.smeth(4) # 这里可以使用实例进行调用
Methods.cmeth(5) # 类方法调用 <class '__main__.Methods'> 5
obj.cmeth(6) # <class '__main__.Methods'> 6 #-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成
@staticmethod
def smeth(x): print(x)
# 等同于:
def smeth(x): print(x)
smeth = staticmethod(smeth)
# 同理
@classmethod
def cmeth(cls, x): print(x)
# 等同于
def cmeth(cls, x): print(x)
cmeth = classmethod(cmeth) #-- 类修饰器:是它后边的类的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成
def decorator(aClass):.....
@decorator
class C:....
# 等同于:
class C:....
C = decorator(C) #-- #实例方法 / 静态方法 / 类方法
class Methods:
def imeth(self, x): print(self, x) # 实例方法:传入的是实例和数据,操作的是实例的属性
def smeth(x): print(x) # 静态方法:只传入数据 不传入实例,操作的是类的属性而不是实例的属性
def cmeth(cls, x): print(cls, x) # 类方法:传入的是类对象和数据
smeth = staticmethod(smeth) # 调用内置函数,也可以使用@staticmethod
cmeth = classmethod(cmeth) # 调用内置函数,也可以使用@classmethod
obj = Methods()
obj.imeth(1) # 实例方法调用 <__main__.Methods object...> 1
Methods.imeth(obj, 2) # <__main__.Methods object...> 2
Methods.smeth(3) # 静态方法调用 3
obj.smeth(4) # 这里可以使用实例进行调用
Methods.cmeth(5) # 类方法调用 <class '__main__.Methods'> 5
obj.cmeth(6) # <class '__main__.Methods'> 6 #-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成
@staticmethod
def smeth(x): print(x)
# 等同于:
def smeth(x): print(x)
smeth = staticmethod(smeth)
# 同理
@classmethod
def cmeth(cls, x): print(x)
# 等同于
def cmeth(cls, x): print(x)
cmeth = classmethod(cmeth) #-- 类修饰器:是它后边的类的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成
def decorator(aClass):.....
@decorator
class C:....
# 等同于:
class C:....
C = decorator(C)
2. 类方法
- 定义:类方法是给类用的,类在使用时会将类本身当做参数传给类方法的第一个参数,python为我们内置了函数classmethod来把类中的函数定义成类方法,一般以cls作为第一个参数
- 实例代码:
# -*- coding:utf-8 -*-
class People(object):
country = 'china' @classmethod
def getCountry(cls):
return cls.country
p = People
print(p.getCountry())
3. 静态方法
实例释义:
# -*- coding:utf-8 -*-
class A(object):
name = 'python'
def test1(self):
print('--test1--')
@classmethod
def test2(cls):#cls代表当前类A
cls.name = 'java'
print('--test2--')
@staticmethod
def test3():#静态方法属于类,没有类方法中那样的默认参数cls,但是可以通过类对象来调用,也可以用类名来调用
A.name = 'C#'
print('--test3--')
a = A()
a.test1()
a.test2()
a.test3()
print(A.name)
property的使用
1. 速查笔记
#-- 类属性高级话题: @property
# 假设定义了一个类:C,该类必须继承自object类,有一私有变量_x
class C(object):
def __init__(self):
self.__x = None
# 第一种使用属性的方法
def getx(self):
return self.__x
def setx(self, value):
self.__x = value
def delx(self):
del self.__x
x = property(getx, setx, delx, '')
# property函数原型为property(fget=None,fset=None,fdel=None,doc=None)
# 使用
c = C()
c.x = 100 # 自动调用setx方法
y = c.x # 自动调用getx方法
del c.x # 自动调用delx方法
# 第二种方法使用属性的方法
@property
def x(self):
return self.__x
@x.setter
def x(self, value):
self.__x = value
@x.deleter
def x(self):
del self.__x
# 使用
c = C()
c.x = 100 # 自动调用setter方法
y = c.x # 自动调用x方法
del c.x # 自动调用deleter方法
python3 速查参考- python基础 8 -> 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)的更多相关文章
- python3 速查参考- python基础 6 -> 函数编程之参数、变量、作用域、递归、匿名函数 lambda
函数基础 1. 速查笔记 #-- 函数相关的语句和表达式 myfunc('spam') # 函数调用 def myfunc(): # 函数定义 return None # 函数返回值 global a ...
- python3 速查参考- python基础 7 -> 函数编程之 装饰器、生成器
装饰器 1.速查笔记 #-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成 @staticmethod def sme ...
- python3速查参考- python基础 4 -> 元组 + 字典 + 字符串 的学习
元组 元组:特点就是内容不可变,算只读的列表,可以被查询,不能被修改 a = 2, print(a) print(type(a)) b = ('a','b','c') print(b[1]) 运行结果 ...
- python3速查参考- python基础 5 -> 常用的文件操作
文件的打开方式 打开方式 详细释义 r 以只读方式打开文件.文件的指针会放在文件的开头.这是默认模式. rb 以二进制只读方式打开一个文件.文件指针会放在文件的开头. r+ 以读写方式打开一个文 ...
- python3 速查参考- python基础 9 -> MySQL基础概念、数据库create、alter、insert、update、delete、select等基础命令
前置步骤: 下载一个绿色版的mysql数据库客户端连接工具 :http://wosn.net/821.html mysql平台为win7(以后会有CentOS上的) 学习目的: 掌握数据库的基本概念, ...
- python3速查参考- python基础 3 -> -> while循环实例 + Continue && break的应用 + 列表的初步学习
while语句的应用 实例如下: """ 述求:用户登录系统,最多只能登录三次 第三次失败后,程序终止 """ user_table = { ...
- python3速查参考- python基础 1 -> python版本选择+第一个小程序
题外话: Python版本:最新的3.6 安装注意点:勾选添加路径后自定义安装到硬盘的一级目录,例如本人的安装路径: F:\Python 原因:可以自动添加python环境变量,自动关联.py文件,其 ...
- python3速查参考- python基础 2 -> if语句应用 + while循环应用
if语句应用之——求最大值 """ 求三个数字中的最大值,并打印出来 """ a = int(input("a:")) ...
- selenium 速查手册 python版
1.安装与配置 pip install selenium 基本使用selenium都是为了动态加载网页内容用于爬虫,所以一般也会用到phantomjs mac下如果要配置phantomjs环境的话 e ...
随机推荐
- template.js 求和 问题
基本适应方法在这不做叙述 <table> <tr> <th>值</th> <th>值</th> <th>值</ ...
- 长春理工大学第十四届程序设计竞赛D Capture The Flag——哈希&&打表
题目 链接 题意:给定一个字符串 $s$,求不同于 $s$ 的字符串 $t$,使得 $Hash(s) = Hash(t)$,其中 $\displaystyle Hash(s) = \sum_0^{le ...
- quartz (从原理到应用)详解篇(转)
一.Quartz 基本介绍 1.1 Quartz 概述 1.2 Quartz特点 1.3 Quartz 集群配置 二.Quartz 原理及流程 2.1 quartz基本原理 2.2 quartz启动流 ...
- 为什么说Redis是单线程的以及Redis为什么这么快!(转)
一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看似 ...
- jmeter结果树乱码的解决方案
- 【Android-布局复用】 多个界面复用一个布局文件(二)
多个界面复用一个布局界面 ,如何找到复用布局文件中的控件的id? 举个栗子: 1. layout_common.xml 复用的布局文件,如何找到button 的id? <?xml versio ...
- 基于sed 的猫狗游戏
1.测试文件 [root@L shells]# cat catDog.txt snake snake pig bird dog cat snake pig bird snake cat bird do ...
- Java项目出现的问题--实际项目01
1 从Excel中导入指纹图谱数据异常 在导入指纹图谱时对Excel的规范是有限制的,有时候报空指针异常是因为虽然有些地方看起来没有内容但是可能有空格键:解决方法是新建一个Excel表,把要用到的 ...
- js实现OSS上传图片,STS临时授权访问OSS
1. 引入aliyun-oss-sdk.min.js <script type="text/javascript" src="/static/js/common/a ...
- Java的消息机制
Java消息机制 1.问: 什么是 Java 消息服务?答: Java 消息服务(Java Message Service,JMS) API 是一个用于访问企业消息传递系统的 API.是 Java 2 ...