python基础(2)__类与函数


1、类和对象基础概念

面向对象编程:OOP=对象+类+继承+多态+消息
        1) 类是抽象的,对象就是具体化
        2) 类:属性+行为,可以有N个对象
        3) 命名格式:
            class 类名(大驼峰命名):
            	pass
        4) 创建类的案例:self代表对象本身
            class Cat:
            	def __init__(self,name,kind,age):
                # 初始化
                pass
            def drink(self):
            	print("猫喝水")  
        5) 实例化对象:【 对象名 = 类名()】
        	obj_cat = Cat()	# 实例化对象 
        6)三大特性:封装、多态、继承

2、魔术方法

1) 定义:python中一种特殊的方法不需要调用即可执行,格式:双下划线开头与结束
2) 使用场景:实例化的属性参数一般放置在init里
def __init__(self):
    # 实例化对象后就会调用
    pass

3、实例化对象

只有实例化的对象可以访问:
1) 实例属性:
	定义的时候  ==》 self.变量名 = 值
	调用的时候  ==》对象名.属性名
	$ 当类中有不少于两个方法使用到的变量,则通常将其设置为实例属性
	
2) 实例方法:
	定义 == 》 方法第一个参数是self
	调用 ==  》 对象名.方法名(参数)
3) 不建议:在实例方法中给实例添加属性

4、类方法、实例方法、静态方法

4.1 基本用法

$$:实例方法改可以修改实例属性,类方法修改类属性。对象都可读取类属性
1) 类属性:定义 ==》   在类中定义的,即非方法内部定义的
					调用 ==》  对象.属性名  或  类名.属性名
					
2) 类方法: 定义 ==》方法名上方加装饰器-- @classmethod
                class Dog:
                    @classmethod
                    def get_sum(cls):    # cls --类本身,self  实例/对象本身,拥有属性行为
                    	pass

3) 静态方法:定义 ==》方法名上方加装饰器-- @staticmethod
                class Dog:
                	@staticmethod
                    def get_sum( ):  
                        # 普通函数,没有必传参数,只放在类中,通过类名.方法名调用
                        pass

4.2 三者区别

类方法和实例方法、静态方法的区别:
    ① 【首个参数】: self代表实例对象,cls代表类,静态方法没有必传参数
    ② 【方法类型声明方式】:类方法需要增加装饰器@classmethod,静态方法要@staticmethod装饰,实例方法不需要装饰
    ③ 【访问权限】
    		实例方法:需要对象实例才可以访问--self
        	类方法:不要对象直接类名访问,类和对象都可以调用
        	静态方法:对象和类都可以访问

5、继承

5.1 基础

1) 继承父类的所有方法和属性(除了私有方法/私有属性)【自己有就用自己的,没有就用父类的】
2)编写规范:
    class 子类名(父类名):
    	pass
3)案例
    class Parsent(): 
        def run(self):
        	print("父类的方法")
    class Son(Parsent):
    	pass

4) 私有化
    1. 定义:方法不希望被子类继承、不想被外部访问、  私有化仅供类的内部使用
    2. 私有化的方式:
        ① 单下划线开头【_num】:  _属性/方法 ,子类或对象都可以访问,但不希望被外部访问
        ② 双下划线开头【__num】: __属性/方法,子类和对象不能访问,访问报错
        
5)  继承多个父类
	5.1 )编写规范:调用父类方法时,按照继承顺序就近原则
                class son(父类名1,父类名2....):
                	pass

5.2 子类重写父类方法

 子类重写父类方法
1) 一般不会重写父类的初始化方法,只会调用父类方法进行额外增加子类要的操作
2) 调用父类方法: super().父类方法【只有子类与父类重名的方法需要使用super】 

5.3 方法重载

1) 对于python,参数类型不受限制。并没有重载
2) 对于java,相同方法名,不同的参数个数类型即可实现

6、多态

    1) python中处处皆多态,鸭子类型:不关心他具体是什么,只关心他有没有对应的操作。只要看起来像鸭子,那他就是鸭子
    2) 判断实例类型:isinstance(obj,People)  == 》 即判断obj是否为People的类型

7、反射

    1) hasattr(对象/类,属性名)  ==》 判断对象/类是否有属性,有则返回True,否则返回False
    2) setattr(对象/类,属性名,属性值) ==》给对象/类,添加/修改属性值,有则修改,无则添加
    3) getattr(对象/类,属性名)  ==》 获取对象/类属性值
    4) delsttr(对象/类,属性名) == 》 删除对象/类属性值,不存在则报错

setattr(对象/类,属性名,属性值) ==》给对象/类,添加/修改属性值,有则修改,无则添加
3) getattr(对象/类,属性名) ==》 获取对象/类属性值
4) delsttr(对象/类,属性名) == 》 删除对象/类属性值,不存在则报错


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值