python笔记10-类

面向对象编程

  • 对象 = 属性(静态 常量) + 方法(动态 函数)
  • 对象是类的实例

特点

  • 封装:信息隐蔽技术
  • 继承:子类自动共享父类之间数据和方法的机制
  • 多态:不同对象对同一方法响应不同的行动
公有和私有
  • 默认公有
  • 私有
# 私有  伪私有
class n:
    __a = '123'
n = n()
n.__a
AttributeError                            Traceback (most recent call last)
<ipython-input-14-61bdf313a8bc> in <module>
      2     __a = '123'
      3 n = n()
----> 4 n.__a

AttributeError: 'n' object has no attribute '__a'
class n:
    __a = '123'
    def getname(self):
        return self.__a
n = n()
n.getname()
'123'
n._n__a # _类名__属性
'123'

继承

class Mylist(list):
    pass
list2 = Mylist()
list2.append(2)
list2.append(8)
list2.append(1)
list2
[2, 8, 1]
list2.sort()
list2
[1, 2, 8]
# 继承
#         子类          基类、父类或超类       
# class DerivedClassName(BaseClassName):

class aa:
    def p(self):
        print('111')
        return 0
class bb(aa):
    pass
a = aa()
b = bb()
a.p(), b.p()
111
111

(0, 0)
# 如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性。对父类不影响
class aa:
    def p(self):
        print('111')
        return 0
class bb(aa):
    def p(self):
        print('222')
        return 2
a = aa()
b = bb()
a.p(), b.p()
111
222

(0, 2)

多态

class A:
    def fun(self):
        print('woshia')
class B:
    def fun(self):
        print('woshib')
a = A()
b = B()
a.fun(), b.fun() # 名字一样 结果不一样
woshia
woshib
(None, None)
self
# self是什么?
class C:
    def sn(self, name):
        self.name = name
    def sm(self):
        print(self.name)
c1 = C()
c1.sn('111111')
c1.sm()
111111
c2 = C()
c2.sn('8888888')
c2.sm()
8888888
  • 我的理解,self就是自带的函数变量,是在类里面的全局变量,在对象中的局部变量。

多重继承

# 多重继承 避免使用多重继承
# class DerivedClassName(Base1ClassName, Base2ClassName, Base3ClassName .....):
class B1:
    def foo11(self):
        print('1111')

class B2:
    def foo22(self):
        print('2222')

class C(B1, B2):
    pass
c = C()
c.foo11(), c.foo22()
1111
2222

(None, None)

组合

# 组合 把类的实例化放在新类里面
class Turtle:
    def __init__(self, x):
        self.num = x
        
class Fish:
    def __init__(self, x):
        self.num = x

class Pool:
    def __init__(self, x, y):
        self.turtle = Turtle(x)
        self.fish = Fish(y)
        
    def pn(self):
        print(self.turtle.num, self.fish.num)

p = Pool(1, 10)
p.pn()
1 10
  • 属性名和方法名相同,则属性覆盖方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值