python初学面向对象

类类的定义:class ClassName: 语句块必须使用class关键字类名必须是用大驼峰
摘要由CSDN通过智能技术生成

面向对象三要素

1. 封装:
- 组装:将数据和操作组装到一起。
- 隐藏数据:对外只暴露一些借口,通过接口访问对象。比如驾驶员使用汽车,不需要了解汽车的构造细节,只需要知道使用什么部件怎么驾驶就行,踩了油门就能跑,可以不了解后面的机动原理。
2. 继承:
- 多复用,继承来的就不用自己写了
- 多继承少修改,OCP(Open-closed Principle),使用继承来改变,来体现个性。
3. 多态:
- 面向对象编程最灵活的地方,动态绑定
人类就是封装;
人类继承自动物类,孩子继承父母特征。分为单一继承、多继承;
多态、继承自动物类的人类、猫类的操作“吃”不同。

类的定义:

class ClassName:
    语句块
  1. 必须使用class关键字
  2. 类名必须是用驼峰
  3. 类定义完成后,就产生一个类对象,绑定到ClassName上

举例:

class MyClass:
    """"A example class"""
    x = 'abc' #类属性
    def foo(sef): #类属性foo,也是方法
        return 'My Class'
print(MaClass.x)
print(MaClass.foo)
print(MyClass.__doc__)

类属性与类对象

  • 类对象 ,类在定义是就会生成一个类对象。
  • 类的属性 ,类中定义的变量以及类中定义的方法都是类的属性。
  • 类变量 ,类中定义的变量就是类变量,例如上例中的x就是类MyClass的变量。

MyClass中,x、foo都是类的属性,doc也是类属性。
foo方法是类的属性,如同吃是人类的方法,但每一个具体的人才能吃东西,也就是说吃是人的实例才能调用的方法。
foo是method方法对象 ,不是普通的函数对象function了,它必须至少有一个参数,且第一个参数必须是self(self可以换个名字),这个参数位置就留给了self。
self指代当前实例本身

实例化

mycls = MyClass() #实例化,初始化
mycls.foo()
print(mycls.x)

使用上面的语法,在类对象名称后面加一个括号,就调用类的实例化方法,完成实例化。实例化就真正的创建了一个该类的对象(实例)。例如人类的实例tom、jerry。
实例化后获得的实例,是不同的实例,即使是使用相同的参数实例化,也得到不一样的对象。Python类实例化后,会自动调用__int__方法。这个方法第一个参数必须留给self,其他参数随意。

__int__方法

MyClass()实际上调用的是__int__(self)方法,可以不定义,如果没有定义会在实例化后隐式调用。
作用:对实例化进行初始化

class MyClass:
    x=123
    def __init__(self):    #实例化
        print('init')
    def foo(self):
        return 'foo {}'.format(self.x)
a = MyClass()
print(a.foo())

运行结果:

init
foo 123

初始化参数可以有多个参数,请注意第一个位置必须是self,例如init(self,name,age)

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

    def show_age(self):
        return self.age


tom = Person('Tom',23)
jerry = Person('Jerry',24)

print(tom .show_age())
tom.age += 1
print('Now {} is {}'.format(tom.name,tom.age))

print(jerry.show_age())

运行结果:

23
Now Tom is 24
24

注意:__init__()方法不能用返回值,也就是只能是None

实例对象instance

类实例化后一定会获得一个对象,就是实例对象
上例中,a、b就是Person的类实例。
__init__方法的第一个参数self就是指代某一个实例。
类实例化出一个实例对象,实例对象会绑定方法,调用方法时采用jerrt.showage()的方法。
但是定义是showage(self),少传一个参数吗?
这个self就是jerry,Python会把方法的调用者作为第一个参数self的实参传入。
self.name就是jerry对象的那么,name是保存在了jerry对象上,而不是Person类上。所以,称为实例变量

self

class MyClass:
    def __init__(self):
        print('self in init = {}'.format(id(self)))

c = MyClass()
print('c = {}'.format(id(c)))

运行结果:

self in init = 21997776
c = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值