类的总复习

类的封装

一.用途与意义
1.数据的重用
2.数据的封装权限
二.属性
1.私有属性:私有设计密码权限
三.私有方法
1.私有设计密码权限
2.方法小结:

class  色狼:
    def __init__(self,name):  #各自独有,不加@classmethod  #类属性方法
        self.name=name
        print(self.name)
    def  setname(self,name):   #类属性方法
        self.name=name
    @classmethod  #method     #类通用方法
    def love(self):  #共有的    加@classmethod
        print("爱美女")
    @staticmethod  #静态方法,不带self.  #类静态方法
    def lovedo():
        print("爱上了美女")

def  printobjid(obj): #外部类方法
    print(id(obj))
    #hasattr检查一下是否有这个方法或者属性,
    obj.lovedo()

print(type(色狼.setname))
print(type(色狼.love)) #classmethod   方法 @staticmethod一样,函数
print(type(色狼.lovedo))
print(type(printobjid))

四.修改方法可以修改行为,劫持

import os 
#os.system("notepad")
#print("noteapad")
#print=os.system
#print("calc")

def go():
    print("comecome")
class 王栋:
    def  go(self):
        print("gogogogo")

xiaowang=王栋()
xiaowang.go()
xiaowang.go=go #修改行为,
xiaowang.go()

五.类的重载
1.对于±*/针对当前类型做出一种新的解释

本质 def __add__(self,otherhouse): #对新的类型做出一种解释
        return  housearea(self.area+otherhouse.area)
h3=h1+h2  #对已有的类型做出新的解释
#h3=h1.__add__(h2) #函数

六.类的基本属性

class  美女演员的干爹:
    '''
    hello ,我是土豪
    '''
    def  __init__(self):
        self.money=1000000000000
        self.car="兰博基尼"
        self.livein="长安街1号18号别墅"
    def  buy(self):
        print("买买买买")
    def do  (self):
        print("土豪房地产开发商")
    def 潜规则(self):
        print("潜规则干女儿")
print(美女演员的干爹.__doc__)#类的说明
print(美女演员的干爹.__name__)#类的名称
print(美女演员的干爹.__module__)#从哪里开始执行
print(美女演员的干爹.__bases__)#父类
print(美女演员的干爹.__dict__)#字典

七.self
self就是地址,自己

class 于前鹏:
    def  __init__(self):
        print(id(self),"self  id")#查看self的地址
  
xiaoyu=于前鹏()
print(id(xiaoyu),"xiaoyu id") #self抽象概念,

dayu=于前鹏()
print(id(dayu),"dayu id")

八.装饰器@property
简化私有变量的权限设计,设计两个方法解释私有变量像公有变量访问

'''

class  Bankmoney:
    def  __init__(self,name,money,addmoney):
        self.name=name
        self.__money=money   #money有上限,下限
        self.__addmoney=addmoney
    def  getaddmoney(self):
        return self.__addmoney
    def  addmoney(self):
        if not isinstance(addmoney,int): #严格的判断,防止意外
            return "数据非法"
        if addmoney<0 or addmoney>1000000000000000:
            return "数据越界"
        self.__money+=self.__addmoney

    def  go(self,a):#函数只能存在一个,重名,后来覆盖前面
        print(a)
    def  go(self,a,b):
        print(a,b)
my=Bankmoney("haipeng",100000,1000000)
#my.go(1)
my.go(2,3)
'''
class  Bankmoney:
    @property #属性,方法名字当作属性
    def addmoney(self): #返回值
        print("调用抓取")
        return self.__addmoney  #私有变量

    @addmoney.setter  #设置
    def addmoney(self,value):
         print("调用赋值")
         if not isinstance(value,int): #严格的判断,防止意外
            raise  "类型异常"
         if value<0 or value>1000000000000000:
            raise  "大小异常"
         self.__addmoney=value

#设计两个方法,实现了私有变量像公有变量一样访问
mybank=Bankmoney()
mybank.addmoney=100000 # def addmoney(self,value):
print (mybank.addmoney)#def addmoney(self):

#print(mybank.__addmoney)
 

类的继承

一.用途意义
1.继承代码重用
二.继承父类的属性方法,子类与父类重名,子类覆盖父类
三.多继承
1.继承多个父类的属性方法

美女演员(美女演员的干爹,美女演员亲爹):#方法,前者覆盖后者
 美女演员亲爹.__init__(self)  #属性,后来覆盖前者
        美女演员的干爹.__init__(self)

四.print(xw.__wife)#私有变量不可以继承
1.强行继承

print(xw._dawang__wife)

2.super,节约内存父类反复初始化

'''
class 爷:
    def __init__(self):
        print("爷构造了一次")

class 大儿子(爷):
    def __init__(self):
        爷.__init__(self)
        print("大儿子构造了一次")

class 二儿子(爷):
    def __init__(self):
        爷.__init__(self)
        print("二儿子构造了一次")

class 小儿子(爷):
    def __init__(self):
        爷.__init__(self)
        print("小儿子构造了一次")

class  媳妇(大儿子,二儿子,小儿子):
    def __init__(self):
        大儿子.__init__(self)
        二儿子.__init__(self)
        小儿子.__init__(self)


xf=媳妇()
'''

class:
    def __init__(self):
        print("爷构造了一次")

class 大儿子():
    def __init__(self):
        super().__init__()
        print("大儿子构造了一次")

class 二儿子():
    def __init__(self):
        super().__init__()
        print("二儿子构造了一次")

class 小儿子():
    def __init__(self):
        super().__init__()
        print("小儿子构造了一次")

class  媳妇(大儿子,二儿子,小儿子):
    def __init__(self):
        super().__init__() #父类初始化,多继承多个父类
xf=媳妇()

类的多态 软件可拓展性,接口不变

class sever:
    def make(self):
        print("先森你好,你需要什么东东")

class makeapple(sever):
    def make (self):
        print("生产苹果")

class makeorange(sever):
    def make(self):
        print("生产橘子")

class makeshit(sever):
    def make(self):
        print("生产shit")


def makesever(obj):#接口不变
    obj.make()

m1=sever()
makesever(m1)
m2=makeapple()
makesever(m2)
m3= makeorange()
makesever(m3)
m4= makeshit()
makesever(m4)

类型识别

isinstance无法识别出子类与父类,type识别会更加精确。

a=10
print(isinstance(a,int))#判断类型
b="123"
print(isinstance(b,str))
c=1
print(isinstance(c,(str,float))) #判断属于类型之一

class father:
    pass
class son(father):
    pass
print(isinstance(father(),father))
print(type(father())==father)
print(isinstance(son(),father))#isinstall,根据父类区别,不能识别父类与子类
print(type(son())==father)#精确识别type

类的动态操作

一.动态给一个对象增加属性,方法属性–动态绑定

class  王毅:
    pass
wangyi=王毅()
wangyi.tall=2.92  #动态增加属性,仅仅适用于当前对象
wangyi.love=lambda :print("喜欢泡妞") #属性,类方法包含self
print(wangyi.tall)
wangyi.love()

xiaowangyi=王毅()
#print(xiaowangyi.tall)
#xiaowangyi.love()

二.方法–动态绑定
types.MethodType将方法跟对象绑定

import types  #类型的模块

class  周资源:
    pass

def  彩票中奖(self):
    print("被调用")
    self.女神的备胎数量=0
    
xiaozhou= 周资源()
xiaozhou.女神的备胎数量=99
print(xiaozhou.女神的备胎数量)

xiaozhou.中奖=types.MethodType(彩票中奖,xiaozhou)#绑定方法给一个对象
xiaozhou.中奖()  #动态增加属性,仅仅适用于当前对象

print(xiaozhou.女神的备胎数量)

dazhou=周资源()
dazhou.中奖()

三.动态判断一个对象有没有属性(hasattr),设置属性(setattr),获取属性(getattr)

class  胡自强:
    def  __init__(self):
        self.lovestr="""妞的存在就是被泡,
        你不泡自有人取你而代之,
        如果反正是被泡,不如被我泡"""
    def  lovedo(self):
        print("喜欢凤姐")

xiaohu=胡自强()
print(xiaohu.lovestr)
print(hasattr(xiaohu,"lovestr"))#判断xiaohu有没有lovestr这个属性
setattr(xiaohu,"lovestr","有妞不泡,天理不容")#设置xiaohu的lovestr这个属性,
print(xiaohu.lovestr)
print(getattr(xiaohu,"lovestr"))#读取xiaohu这个对象属性
print(getattr(xiaohu,"lovegirl","凤姐"))#获取属性,存在就返回属性,不存在返回默认值
#print(setattr(xiaohu,"age",100)) #没有这个属性,就创造一个,有这个属性覆盖
#print(xiaohu.age)

四.类的动态操作
动态判断哪一个对象有没有方法,设置方法,获取方法

import types
class  胡自强:
    def  __init__(self):
        self.lovestr="""妞的存在就是被泡,
        你不泡自有人取你而代之,
        如果反正是被泡,不如被我泡"""
    def  lovedo(self):
        print("喜欢凤姐")

def lovedo(self):
    print("喜欢上了凤姐")

xiaohu=胡自强()
xiaohu.lovedo()
print(dir(xiaohu))
print(hasattr(xiaohu,"lovedo"))#方法存在
print(getattr(xiaohu,"lovedo"))#抓取到了方法
#print(setattr(xiaohu,"lovedo",lovedo)) #setattr无法绑定方法,“”self,“”
#绑定用xiaozhou.中奖=types.MethodType(彩票中奖,xiaozhou)#绑定方法给一个对象
xiaohu.lovedo=types.MethodType(lovedo,xiaohu) #动态方法

xiaohu.lovedo()

五.对象属性与类属性

#动态解释
#num=1   #新建一个变量,存储常量1的地址
#num=1
#num=2  #新建一个变量,存储常量1的地址,再存储为常量2的地址
class  梁华锋:
    def __init__(self):
        self.name="小梁"  #类属性

xiaoliang=梁华锋()
xiaoliang.name="daliang" #类属性
xiaoliang.备胎数量=10  #对象属性,

六.限制动态绑定

class 王前程:
    __slots__=("name","love")    # __slots__   元组

xiaowang=王前程()
xiaowang.name=王前程.__name__
xiaowang.love="芙蓉姐姐"
xiaowang.loveother="凤姐" #限制你不能乱绑定

print(xiaowang.love)
print(xiaowang.name)

类识别

isinstance无法识别子类与父类,精确的是type

a=10
print(isinstance(a,int))#判断类型
b="123"
print(isinstance(b,str))
c=1
print(isinstance(c,(str,float))) #判断属于类型之一

class father:
    pass
class son(father):
    pass
print(isinstance(father(),father))
print(type(father())==father)
print(isinstance(son(),father))#isinstall,根据父类区别,不能识别父类与子类
print(type(son())==father)#精确识别type

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python是一门高级、易学且功能强大的编程语言,常被用于数据科学、Web开发、自动化脚本和机器学习等领域。进行Python复习,可以从以下几个关键部分入手: 1. **基础语法**: - 变量和数据型(如整数、浮点数、字符串、列表、元组、字典等) - 控制结构(条件语句、循环、异常处理) - 输入输出(input()和print()函数) 2. **函数和模块**: - 函数定义和调用 - 内置函数和标准库使用 - 导入模块和包 3. **面向对象编程**: - 和对象 - 封装、继承和多态的基本概念 - 特殊方法(如`__init__`、`__str__`等) 4. **数据结构和算法**: - 列表推导式和生成器 - 集合和字典操作 - 常见算法(排序、搜索等) 5. **Python 3 新特性**: - f-string格式化 - 列表和字典推导 - Context Managers和with语句 6. **标准库**: - os、sys、math、datetime等模块的使用 7. **数据分析与科学计算**: - NumPy、Pandas和SciPy库 - 数据清洗、处理、分析 8. **Web开发**: - Flask或Django框架基础 - HTML模板和请求响应模型 9. **机器学习与人工智能**: - Scikit-learn库简介 - TensorFlow和Keras的简单应用 10. **实践项目**: - 完成一些小项目以巩固所学知识,如爬虫、小游戏或数据分析应用。 如果你需要更深入的学习资料或者具体某个方面的复习建议,随时告诉我,我可以提供相关的资源链接和练习示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青灯有味是儿时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值