Python入门(十一)面向对象、封装、与继承、以及self含义

面向对象(要中之中)

什么是对象呢?

个人理解就是 同代码打出来的一个实体,
以LOL举个例子:
每一个英雄都是一个独立的对象,每个英雄(对象)还有自己的血量(属性),以及技能(方法)。
当你想用某个英雄的技能时,就需要调用某个英雄过来让它去放。

了解后,上代码

class Bar:
def foo(self,arg): self 也就是 obj
print(self,self.name,arg ) 输出: obj的地址 , obj的name也就是’SunChuang’, 传入的参数666

obj = Bar()   此时foo 中的self就是 obj
obj.name = 'SunChuang'  这里吧name变量封存到对象之中 即为封装(。。。python的封装是真的lllllow)
obj.foo(666)

self
self 中 是谁调用该函数,self就是谁(对象)
构造方法
class Bar:
def init(self,name,age): 添加构造方法时, 再调用这个类时,需要把参数传递给构造函数
self.n =name 接收 self (lizi1)传的参数,赋值给 lizi1的n 变量 把变量还是储存到中间人(对象)的内存里
self.a = age
def show(self):
print(’%s-%s’ %(self.n,self.s))
lizi1 = Bar(‘李欢’,18)

继承
class Father:
def basketball(self):
pass
class Son(Father) #这就是继承
def baojian(self):
pass

重写:即不会执行父类的方法,执行自己的。
Super 代指父亲的类。
    super(当前类的类名,self).父类的方法
    父类名.父类的方法(self) 这个self需要自己添加下,系统不会自己创建。
**python 可以 多继承
如下
Class Son(Father1,Father2):  在子类查找父类方法的时候,会从左到又查找。
(2)如果出现查找的父类上还有父类会按当前分值继续查找。
    pass                  
    (3):如果是有共同的跟父类  会先查每条分支的底层,最后查找公共的根。   
obj = Son()
obj.方法

多态
Python 里 多态可以忽略。因为傻瓜语言嘛
就从这点看,谁说python 比java猛,我先跳出来给你一拳!(玩笑)

// 练习主要练习self.属性 过多不练。
# import time
# class Person:
#     def __init__(self, n, a, g, f):
#         self.name = n
#         self.age = a
#         self.xueliang = g
#         self.fight = f
#
#     def fighthim(self):
#         print('即将战斗')
#         time.sleep(3)
#         self.xueliang = self.xueliang - 20
#         self.fight = self.fight + 30
#         print('战斗结束血量下降20,当前血量剩余%d' % self.xueliang)
#         print('战斗力增长30,当前战斗力为%d' % self.fight)
#
#
# rol_list = []
# y_n = input('是否创建角色')
# if y_n == 'y':
#     name = input('请输入名字')
#     age = input('请输入年龄')
#     xueliang = int(input('输入血量'))
#     fight = int(input('战斗力多少'))
#     member = Person(name, age, xueliang, fight)
#     rol_list.append(member)
#     for i in rol_list:
#         print(i.name)
#     flag = True
#     while flag:
#         y_f = input('是否战斗')
#         if y_f == 'y':
#             member.fighthim()
#         else:
#             flag = False

在 init 方法里 创建的 字段(self.name)属于普通字段,是属于对象的,只能通过对象访问
在类里直接定义的字段 属于 静态字段。 对象,类都可以访问

静态方法
class Foo:
@staticmethod 就是加个装饰器
def bar(): 静态方法可以没有self
print(‘我是静态方法’)

类方法
class Foo:
@classmethod
def classmethod(cls): cls 是class的缩写。 也就是类名,作用可以直接通过类来执行。
print(‘我是类方法’)

@property
属性方法

调用的时候 只需要 obj.方法名字     不用加括号

@属性方法名.setter 是为 属性方法赋值。
方法名也要与属性方法名相同
obj.perr =123 即可设置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

闯孙闯孙

觉得有用就赞一个呗

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

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

打赏作者

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

抵扣说明:

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

余额充值