基础概念


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、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)的更多相关文章

  1. python3 速查参考- python基础 6 -> 函数编程之参数、变量、作用域、递归、匿名函数 lambda

    函数基础 1. 速查笔记 #-- 函数相关的语句和表达式 myfunc('spam') # 函数调用 def myfunc(): # 函数定义 return None # 函数返回值 global a ...

  2. python3 速查参考- python基础 7 -> 函数编程之 装饰器、生成器

    装饰器 1.速查笔记 #-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成 @staticmethod def sme ...

  3. python3速查参考- python基础 4 -> 元组 + 字典 + 字符串 的学习

    元组 元组:特点就是内容不可变,算只读的列表,可以被查询,不能被修改 a = 2, print(a) print(type(a)) b = ('a','b','c') print(b[1]) 运行结果 ...

  4. python3速查参考- python基础 5 -> 常用的文件操作

    文件的打开方式 打开方式 详细释义 r  以只读方式打开文件.文件的指针会放在文件的开头.这是默认模式. rb  以二进制只读方式打开一个文件.文件指针会放在文件的开头. r+  以读写方式打开一个文 ...

  5. python3 速查参考- python基础 9 -> MySQL基础概念、数据库create、alter、insert、update、delete、select等基础命令

    前置步骤: 下载一个绿色版的mysql数据库客户端连接工具 :http://wosn.net/821.html mysql平台为win7(以后会有CentOS上的) 学习目的: 掌握数据库的基本概念, ...

  6. python3速查参考- python基础 3 -> -> while循环实例 + Continue && break的应用 + 列表的初步学习

    while语句的应用 实例如下: """ 述求:用户登录系统,最多只能登录三次 第三次失败后,程序终止 """ user_table = { ...

  7. python3速查参考- python基础 1 -> python版本选择+第一个小程序

    题外话: Python版本:最新的3.6 安装注意点:勾选添加路径后自定义安装到硬盘的一级目录,例如本人的安装路径: F:\Python 原因:可以自动添加python环境变量,自动关联.py文件,其 ...

  8. python3速查参考- python基础 2 -> if语句应用 + while循环应用

    if语句应用之——求最大值 """ 求三个数字中的最大值,并打印出来 """ a = int(input("a:")) ...

  9. selenium 速查手册 python版

    1.安装与配置 pip install selenium 基本使用selenium都是为了动态加载网页内容用于爬虫,所以一般也会用到phantomjs mac下如果要配置phantomjs环境的话 e ...

随机推荐

  1. Semantic 导航条

    <!DOCTYPE html> <html>       <head>         <meta charset="UTF-8"> ...

  2. 题解 [BZOJ4368][IOI2015]boxes纪念品盒

    题面 解析 可以发现,发纪念品有三种方式: 从左边走再原路返回. 从右边走再原路返回. 走一圈. 注意到,第三种走法最多只会走一次, 因为如果走了多次,那发放的物品数量就会>=\(2k\), 那 ...

  3. Java基础知识学习01

    0 项目,包,文件,类 Mytest是自己建的java工程,包含src和JRE System Libery.其中src是存放自己的代码的地方,JRE包含程序运行时所需要的各种文件:在src下包含Tes ...

  4. js上传整个文件夹

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  5. 洛谷P2110 欢总喊楼记

    洛谷题目链接 乱搞qwq 我们其实可以找规律,对于每个数$x$,我们先求出从$1$~$x$中有多少符合条件的,记为$sum[x]$,那么类似于前缀和,答案自然就是$sum[r]-sum[l-1]$了 ...

  6. delphi将字符串转换成stringlist

    function StrToList(const sString, Token: string): TStringList;var sTmp: string; iPos: Integer; Tokle ...

  7. hdu6568 Math (概率dp)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6568 题意: 在$0$到$L$的坐标轴运输货物,在每个整数点可能丢失货物,丢失概率为$p$,丢失后可 ...

  8. HDU 3394 Railway —— (点双联通,记录块信息)

    这题是比较模板的找点双联通并记录的题目. 题意大概是:一个公园有n个景点,1.所有游客都是绕环旅游的,找出所有不在环内的路的条数:2.如果两个环中有重复的边,那么这些边是冲突的,问冲突的边的总数. 分 ...

  9. Java后台开发精选知识图谱

    1.引言: 学习一个新的技术时,其实不在于跟着某个教程敲出了几行.几百行代码,这样你最多只能知其然而不知其所以然,进步缓慢且深度有限,最重要的是一开始就对整个学习路线有宏观.简洁的认识,确定大的学习方 ...

  10. PySpider的安装

    使用 Pip 安装,命令如下 pip install pyspider 命令执行完毕即可安装成功. 常见错误: Windows 下可能会出现这样的错误提示:Command "python s ...