2020-11-08Python面向对象学习笔记

13 篇文章 0 订阅

Python面向对象学习笔记
① 类名   AaaBbb (多个单词首字母大写)                ps: 普通变量名小写,多个单词间用下划线连接

② 类的实例化:  变量名=类名()                               ps:没有关键字 new     

③ 调用类下的方法 :  变量名.方法名()                    调用类下的属性:变量名.属性名

        ps:   1> 方法和函数有区别~ 但现在好像不区分了~        2>在类下编写的函数与在模块中编写的函数有区别,前者参数列表中强制需要一个 self     

④ 代码示例

     ps:不建议一个模块下,既定义了类,又实例化。建议类单独放在一个模块

⑤clss常见误区1:在类中调用函数 ×                     ps:类只负责刻画、描述,不负责执行代码

⑥ 在第二个模块B.py 中调用第一个模块A.py(类Student)中的方法:  from A import Student    导入类,然后实例化并调用

⑦ 方法和函数的区别:现在区别比较模糊--- 在C、C++中常称 函数,在Java,C#中常称 方法 ;   方法:侧重在设计层面;函数:程序运行,过程中的称谓

⑧ 类下有:数据成员(特征)+方法(行为)        类:共性(模板);实例:个性;       

⑨ 实例化的时候,会自动调用构造函数( def __init__(self):      下的内容)  当然 __init__函数也可以被调用

⑩ 构造函数(__init__),不能返回除了None之外的东西~    return None √  (默认值)         return ‘123’  ×               

⑩① 构造函数作用:让模板生成不同对象,__init__可以传入参数      def  __init__(self,参数1,参数2...):             此时在实例化的时候必须传入对应的参数

                                 初始化对象的特征/属性          name(类下的属性) = name(传入的参数) ps:但此时用实例名.属性 不会获得传入的值

⑩② 类变量:和类相关联的变量

        实例变量:和对象相关联的  (对象由类实例化产生的)    正确的实例变量赋值方式:self.name=name

        实例变量---传入类中---修改类变量( __init__下:self.name=name) ---可通过实例名.属性 获得

⑩③ self与类无关,只和对象有关         self代表对象/实例      

⑩④ 实例方法:与对象/实例相关联,实例可以调用

⑩⑤ 在实例方法中访问/修改类变量   a:实例方法下 使用 实例名.类变量名        b: 实例方法下 使用 self.__class__.类变量名

⑩⑥ 类方法    @classmethod  (@装饰器)  def add_num(cls):  pass            ps:这里建议用cls,而不是常用的self (但是用别的名也可以~)

⑩⑦ 在类方法下 访问/修改 类变量      cls.num+=num   可直接修改

⑩⑧ 类方法调用: 类名.类方法名       

⑩⑨ 类方法与实例方法的区别:类方法关联类;实例方法关联实例

②① 对象调用类的方法?可以       建议不要用~ 在逻辑上是说不通的~

②② 静态方法:@staticmethod     def add(x,y):pass            静态方法可以同时被类和对象调用     静态方法内部也可以访问类变量: 类名.类变量名                  静态方法不不能访问实例变量

②③ 静态方法:能用静态方法的都可以用类方法代替,类方法更方便~        建议不用静态方法,与面向对象关系不大~         

②④ 类方法,静态方法 代码示例

②⑤ 通过方法修改数据变量比直接修改数据变量安全---方法可以修改的同时进行判断

②⑥ 成员可见性 : 其他OOP语言:公开的 public (可读取,可赋值)     私有的 private  

        1> 若 变量/方法 名前有__(双下划线) 例如: def __marking(self,score):      python 认为是 私有的;

           若没有 __,默认是公开的              (特殊   __init__  这种命名方式,不是私有~    前后都有下划线,是python内置函数的风格~)

        2> student1.__socre=-1        python的动态语言的特性,能给 student1 添加新的属性 __score

        3> 可用 __dict__ 内置函数查看一下(student1.__dict__):        原私有变量 的 存储  _Student__score (python自动更改~)  ,新加的变量   __score                                    ps:所以python对私有变量的保护很简单:只是在把k,v存到dict时名字k 改了。。。

②⑦ 面向对象三大特性:封装,继承,多态

②⑧ 继承性:(python可以多继承)

        单继承:1>举个例子,并不规范:

                      2>规范的:   

                           将 Human.__init__(self,name,age)    替换成  super(Student,self).__init__(name,age)

②⑨ super   也可用于普通的实例方法里

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卅拓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值