美文网首页
(6) python中面向对象

(6) python中面向对象

作者: Wei_Lai | 来源:发表于2018-10-30 01:25 被阅读0次
变量上为 类变量,实例变量

有意义的面向对象的代码
类 是面向对象最核心的观念
类、对象
实例化
类最基本的作用:封装
一定要用self,引用 self.
类只负责定义,不会去运行
类和对象。
数据成员
构造函数可以让模板生成不同的对象

类是现实世界或思维世界中的实体在计算机中的反馈
它将数据以及这些数据上的操作封装在一起

类 被 实例化后 就成了一个具体的对象
类就像是一个模板,通过类 就可以产生很多对象。

#比如这段代码为  1.py
class Human():
    sum = 0  #在class内部定义变量    类变量 (和类相关联在一起的)
    def __init__(self,name,age):#构造函数 ,
    #文件夹中得含有  _init_.py   模块才会被认为是一个包。包 导入时会优先运行.
    #初始化对象属性  
        self.name = name # 定义实例时需要self,调用实例不需要给self赋参 
        self.age = age   #定义实例变量,实例变量只和对象相关 self.
        #return NONE (构造函数只能返回NONE)  (补充知识)

    def get_name(self):
        print(self.name)

    def do_homework(self):
        print('This is a parent method')
from 1.py import Human  

class Student(Human):     #Human是Student的父类,Student是Human的子类
  
    def __init__(self,school,name,age):
        self.school = school 

        super(Student,self).__init__(name,age)  #建议以此方式调用父类
        #super 不仅仅可用于构造函数,也可以用于普通的实例方法

        # Human.__init__(self,name,age)   #子类里调用父类构造函数
        #self   用类调用实例方法没意义,所以加self

    #     self.age = age 
  

    def do_homework(self):      #子类和父类同名的话,不会报错,先使用子类
        #super(Student,self).do_homework()  #This is a parent method
        print('English homework')
        
student1 = Student('jinan university','wei',18) #实例化
student1.do_homework() #English homework
print(student1.name) #wei
print(student1.age)#18
#继承   单继承  多继承

定义一个类

class Student():
    name = ''   #在class内部定义变量    类变量 (和类相关联在一起的)
    age = 0   
    #行为 与  特征   
         
    def __init__(self,age,name):        #构造函数(实例化后,会自动调用)
        #初始化对象属性
        self.neme = name 
        self.age = age        #定义实例变量,实例变量只和对象相关 self.

    #    #return NONE (构造函数只能返回NONE)  (补充知识)

    def print_files(self):        #在class内部定义函数
        print('name:'+ self.name)
        print('age:'+ str(self.age))

student = Student()  #类的实例化
student.print_files()  #类下面方法的调用
#  建议 类的实例化以及类下面方法的调用 与类的定义放在不同的模块。
# 定义实例时需要self,调用实例不需要给self赋参 

详解

# 模块
c = 50

def add(x, y):
    c= x+y 
    print(c)

add(1,2)       #3   函数中局部变量的值
print(c)       #50  全局变量的值
 
# 两个print(c)的区别 
# 局部变量不会改变全局变量的值

类和模块要区别对待

'类变量' 和 类 关联在一起的
'实例变量' 和 对象 关联在一起的
class Student():        
    sum=0   
    name = 'weilai'   
    age = 0

    def __init__(self,name,age):   
        self.name = name            
        self.age = age

    def marking(self,sorce):         #内部访问
        if sorce < 0:                #建议通过方法 对 类变量赋值
            # sorce =0
            return '不能给同学打负分'
        self.__sorce = sorce
        print(self.name + '同学本次的考试分数为:' + str(self.__sorce))
        return 'hello'
result =  student1.marking(80)#wang同学本次的考试分数为:80
print(result)   #hello
class Student():        
    sum=0    #   类变量   和类相关
    name = 'weilai'   #在class内部定义变量    类变量
    age = 0           # 类中赋值没有意义的。   #21 ,22 其实是与对象相关,不应出现在这
    # 行为 与  特征   
         
    def __init__(self,name,age):     #构造函数(实例化后,会自动调用),是一个特殊的方法
        #主要是被用来初始化对象属性
        self.name = name            #实例方法操控实例变量
        self.age = age
        print(self.__class__.sum)   
        print(Student.sum)
        self.__class__.sum +=1      #实例方法访问类变量中的sum
        print(Student.sum)
student1 = Student('wang',18)
student2 = Student('li',19)

类方法主要操作和类相关的变量
用类调用类方法

class Student():        
    sum=0   
    name = 'weilai'   
    age = 0

    def __init__(self,name,age):   
        self.name = name            
        self.age = age

    @classmethod                  #让其成为类方法     
    def plus_sum(cls):             #sum每运行一次就+1
        cls.sum+=1
        print(cls.sum)

student1 = Student('wang',18)
Student.plus_sum()  #用类调用类方法
student2 = Student('li',19)
Student.plus_sum()

对象调用类方法(python可用但最好不要用)

class Student():        
    sum=0   
    name = 'weilai'   
    age = 0

    def __init__(self,name,age):   
        self.name = name            
        self.age = age

    @classmethod                  #让其成为类方法     
    def plus_sum(cls):             #sum每运行一次就+1
        cls.sum+=1
        print(cls.sum)

student1 = Student('wang',18)
student1.plus_sum()  #用对象调用类方法
student2 = Student('li',19)
student2.plus_sum()

静态方法

class Student():        
    sum=0   
    name = 'weilai'   
    age = 0

    def __init__(self,name,age):   
        self.name = name            
        self.age = age

    @staticmethod                #静态方法
    def add(x):
        print(Student.sum)
        print('this is a static method')

静态方法 能用的地方 基本可以用 类方法替代(最好用类方法)
当和类和对象没多大关系的时候,可以使用静态方法
静态方法和类方法 均不能访问 实例变量

类中赋值没有意义的。

class Student():
    name = 'weilai'
    age = 0

    def __init__(self,name,age): 
        name = name   
        age = age
      
student1 = Student('wang',18)
print(student1.name)   #weilai
print(student1.age)    #0
print(student1.__dict__)    #{}   #__dict__显示student1下所有的变量,即没有变量
# python  会先在  实列变量上寻找 ,寻找不到就会到类变量里寻找,(然后再到父类里寻找)
# 所以即使student1为空,也显示了类变量下的值
#公开的 public    私有的(外部不能访问)private  在方法或变量前加__ 表示私有的
#__init__ 构造函数是python特有的,可以从外部访问
#print(student1._Student__sorce)    表明python中私有只是改了一个名字

相关文章

  • (6) python中面向对象

    有意义的面向对象的代码类 是面向对象最核心的观念类、对象实例化类最基本的作用:封装一定要用self,引用 sel...

  • 2019-10-23

    python面向对象编程总结 python中的对象:在其...

  • 营销比赛二三事

    Python面向对象编程三大特性调研 Python面向对象之封装 在Python中,没有类似 private 之类...

  • python中"面向对象"来啦........

    python是一种面向对象的语言。 Python中通过使用类(class)和对象(object)来实现面向对象 面...

  • 第7天,面向对象

    @(python)[笔记] 目录 前言 在python中,一切皆对象面向对象的程序设计的核心就是对象;面向对象的程...

  • python面向对象学习笔记-01

    学习笔记 # 0,OOP-Python面向对象 - Python的面向对象 - 面向对象编程 - 基础 -...

  • Python 面向对象编程

    Python 面向对象编程(一) Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象...

  • Python学习笔记之类和对象

    面向对象编程,是当前比较主流的编程方式。Python同样支持面向对象编程,在面向对象编程中,可以编写表示现实世界中...

  • python基础-02

    Python 面向对象 python是一门面向对象的语言 Python内置类属性 python对象销毁(垃圾回收)...

  • Python中的面向对象

    Python中的面向对象 面向过程和面向对象的区别 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据和函数绑...

网友评论

      本文标题:(6) python中面向对象

      本文链接:https://www.haomeiwen.com/subject/zpnitqtx.html