0基础学习pythonTASK7——面向对象编程

目录

1 面向对象编程

1.1 面向过程编程

1.2 面向对象编程

2 类和实例

3   词汇训练

4  继承

4.1 调用父类init方法

5 私有变量理解


1 面向对象编程

在python中,所有数据类型都可以视为对象,当然也可以自定义对象,自定义的对象数据类型就是面向对象中类(Class)的概念。

通过一个例子加深理解


1.1 面向过程编程

假如我们想要处理学生的成绩

std1 = {'name':'xiaoyang','score':95}
std2 = {'name':'xiaoxun','score':88}
std1,std2


def count(name,score):
    print("名字是%s,得分是%s" %(name,score))
          
          
count('xiaosun',120)

1.2 面向对象编程

如果采用面向对象编程,我们首选思考不是程序的执行流程,而是一个数据类型被视为一个对象,像个对象拥有xxx和xxx属性,

#面向对象编程

class Student():
    def __init__(self,name,score):
        self.name = name
        self.score = score
        
    def print_score(self):
        print("名字是%s,成绩是%s" %(self.name,self.score))
        
#调用实例
a = Student('xiaoyang',140)
a.print_score()
    
    

以本例子解释,Student就是Class类是指学生这个概念,而xiaoyang这个具体的概念则是一个实例(instance),都是指向一个个具体的学生。

2 类和实例

  面向对象最重要的概念就是类和实例,类是抽象的模板,例如上个例子的Student,而实例时根据类创建出来的一个个具体的对象,

class Turtle:#python中的类名约定以大写字母开头
    #属性
    color = 'green'
    weight = 10
    legs = 4
    shell = True
    mouth = '大嘴'
    
    
    #类的方法
    def climb(self):
        print('我正在很努力的向前爬')
    def run(self):
        print('我正在飞快的向前跑')
    def bite(self):
        print('咬死你')
    def eat(self):
        print('有的吃,真满足')
    def sleep(self):
        print('困了睡觉')
        
tt = Turtle()
print(tt)
tt.climb()
tt.bite()
#用类学唱歌
class Song():
    def __init__(self,lyrics):
        self.lyrics = lyrics#实例变量
        
    def print_lyrics(self):
        for line in self.lyrics:
            print(line)
        
        
c = Song('abcdefghigkimnopqrstucwxyz')#调用实例打印英文字母哥

c.print_lyrics()

def__init__(self,parm1...) 这是类的初始化方法,构造方法, 根据类创建对象时自动执行,

#用类学唱歌
class Song():#定义一个Song类
    
    lyrics = '1234567'#类变量lyrics
    #def __init__(self):#定义个init函数带有self和lyrics参数
        #self.lyrics = lyrics#实例变量
        
    def print_lyrics(self):#定义一个print_lyrics类的方法,
        
            print(self.lyrics)
        
        
c = Song()#调用类

c.print_lyrics()#调用实例中类的方法
#这个例子中lyrics时类的变量
b = Song()
Song.lyrics= '12312414155'#修改类变量
print(b.lyrics)

上述例子变量lyrics属于类变量,类变量特点是所有类的实例化对象都同时共享类变量,类变量在所有实例化对象中是作为公共资源存在的。

3   词汇训练

classX(Y):创建一个名为X并继承自Y的类

classX(object):def__init__(self,j):类X有一个带有self和J参数的init函数

class X(object):def M(self,J): 类X带有一的self和J参数的M函数

foo = X(): 设foo 为X的一个实例

foo.M(J):从foo哪里获得M函数,并用self和参数J调用它

foo.K = Q :从foo哪里获得K属性,并设它为Q

4  继承

#继承父类初始化过程中的参数
class Father():#定义一个父类
    def __init__(self,a,b):类的构造方法init函数里面包含a,b参数
        self.a =a#实例对象
        self.b = b
    def dev(self):#定义一个dev函数里包含self
        return self.a -self.b#函数返回值a-b
#调用父类初始化参数a,b并额外增加参数c

class Son(Father):#定义一个Son类继承自Father
    def __init__(self,a,b,c=10):#init函数包含self,a,b,c=10,参数
        Father.__init__(self,a,b)#继承父类的构造方法以及a,b参数
        self.c = c#实例对象
    def add(self):#定义add类的方法
        return self.a +self.b#返回a+b
    def copmpar(self):#定义copmpar类的方法
        if self.c >(self.a+self.b):#条件判断c的值是否大于a+_b
            return True#大于的华返回True
        else:
            return False#小于则返回False
        
s= Son(1,2,1)#创建实例并传入参数a,b,c,此时c的值成为1
s.dev()#调用实例中dev方法,子类继承父类的全部方法,因为子类没有重写父类的方法,调用父类方法
s.add()#调用实例中ad方法
s.copmpar()

4.1 调用父类init方法

#调用父类init方法
class Father():
    def __init__(self):
        self.a= a
class Son(Father):
    def __init__(self):
        pass
    
s = Son()
print(s.a)

如果子类自己也定义了__init__方法,那么父类属性时不能直接调用的,会报错

 

super()函数

在解决多继承问题,python引入了super()机制

#修改一下
#调用父类init方法
class Father():
    def __init__(self):
        self.a= 'aaa'
class Son(Father):
    def __init__(self):
        super().__init__()#这里也可以用Father.__init__(self)这个方法里self一定加上
    
s = Son()
print(s.a)

5 私有变量理解

#继承
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义一个私有属性
    __weight = 0
    
#定义类的方法
    def __init__(self,n,a,w):#init方法包含self,n,a,w参数
        self.name = n#实例对象
        self.age = a
        self.__weight = w
        
    def speak(self):
        print("%s说:我%d岁 。"%(self.name,self.age,self.__weight))
        
#单继承示例
class student(people):#继承了people
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
        
    def speak(self):
        print("%s说:我%d岁,读%d年级 。"%(self.name,self.age,self.grade))
        
s= student('小孙',10,60,3)
s.speak()

变量前面使用__下划线表示这个变量是私有变量,只能在类内调用

参考

https://github.com/datawhalechina

https://www.liaoxuefeng.com/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值