博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3入门与实践(四): 面向对象
阅读量:6656 次
发布时间:2019-06-25

本文共 2788 字,大约阅读时间需要 9 分钟。

  • 类变量 直接在类里面定义

class Student():    sum_student = 0复制代码
  • 实例变量 在实例方法里通过self.xxx进行定义和读取

class Student():    # 构造函数 __init__     def __init__(self,name):        self.name = name    # 实例方法第一个参数不是必须叫self,但是第一个参数代表的是实例本身(this)            def print_name(self):        print(self.name)复制代码
  • 内置函数 dict

__dict__在类中代表类的全部属性的字典,在实例中代表对象的全部属性的字典print(student.__dict__)print(Student.__dict__)复制代码

==当通过 student.name获取变量值的时候,首先会查找实例变量里有没有name属性,如果有则返回,如果没有就会去类变量里找,如果还是没有则会报错==

  • 实例方法

  1. 实例方法通过self.xxx访问实例变量和类变量,具体区分参考上文,不推荐
  2. 实例方法可以通过self.class.xxx访问类变量
  3. 实例方法不可以直接访问类变量
class Student():    sum_student = 0        def __init__(self,name):        self.name = name            def print_name(self):        # 实例方法不可以直接访问类变量        # print(sum_student)        # 这样可以访问类变量,但是不推荐        print(self.sum_student)        # 实例方法访问类变量的正确打开方式        print(self.__class__.sum_student)        # 访问实例字典        print(self.__dict__)        print(self.name)复制代码
  • 类方法 和 静态方法

==类方法和静态方法不能访问实例方法!!!!==

class Student():    sum_student = 0        # 类方法,第一个参数代表类本身    @classmethod    def add_and_print_sum(cls):        cls.sum_student+=1        print(cls.sum_student)            # 静态方法,与类方法不同的是可以不用传第一个参数    @staticmethod    def add(x,y):        # 访问类变量(所有地方都可以这样访问类变量)        print(Student.sum_student)        print(x+y)复制代码
  • 私有方法和私有变量

在方法或者变量前加__ 构造函数__init__ 可以通过外部访问,是因为init前后都有‘__’, 这是python的内置命名风格,自己命名尽量不要这样做

class Student():    def __init__(self,name,score):        self.__name = name        self.__score = score            def __check_score(self,score):        if score>100 or score<0 :            print("分数必须在0-100之间")            return False        return True            def marking(self,score):        if not self.__check_score(score):            return        self.__score = score        print(self.__name+"的当前分数:"+str(self.__score))复制代码

==注意==

stu = Student('gwf',10)# 这样操作虽然是可以的,但是这不是我们在方法中定义的私有变量__score,而是基于python动态语言的特性,又创建了一个__score的变量stu.__score = -1print(stu.__score)# 真正我们创建的私有变量,在python中是以_Student__score(_类名__私有变量名)进行保存的print(stu.__dict__)# 上面代码打印的结果为{'name': 'gwf', '_Student__score': 10, '__score': -1}# 可以通过stu._Student__score 访问到真正的私有变量,但是不推荐这样做print(stu._Student__score) # 输出 10 复制代码
  • 继承

class Human():    def __init__(self,name,age):        self.__name = name        self.__age = age    def do_homework(self):        print("这是一个父类方法")        def get_name(self):        return self.nameclass Student(Human):    def __init__(self,name,age,school):        # 不建议这样用        # Human.__init__(self,name,age)        # 正确用户        super(Student,self).__init__(name,age)        self.school = school            def do_homework(self):        super(Student,self).do_homework()        # 不可以这样访问父类变量        # print(self.__name)        # print(super(Student,self).__name)        print(super(Student,self).get_name()+"正在做作业")复制代码

转载地址:http://rjxto.baihongyu.com/

你可能感兴趣的文章
Git - 如何修改开源项目并推送给作者 / 克隆远程仓库到本地
查看>>
分布式服务协调员zookeeper - 应用场景和监控
查看>>
源码 安装步骤
查看>>
PMBOK中输入输出工具的规律
查看>>
Core Animation之CAKeyframeAnimation学习篇
查看>>
代码中weak, alias
查看>>
ios开发日志-button+UIAlertView
查看>>
盛最多的水 Container With Most Water
查看>>
类反射机制简单使用
查看>>
详解apt-get update和apt-get upgrade的好帖子
查看>>
【转载】MySQL 之临时表和内存表
查看>>
【原创】MySQL 之 slow log
查看>>
Linux基础 文本处理命令
查看>>
Flutter入门一:安装Windows开发环境
查看>>
MySQL Replication可扩展设计
查看>>
oracle 对象管理 05_系统函数
查看>>
Linux下Java运行环境安装
查看>>
lua 随机生成 中国大陆 ip
查看>>
三种实现页面跳转的方法
查看>>
Fuchsia 操作系统的四层结构
查看>>