Task07类、对象与魔法方法

类、对象与魔法方法

13.类与对象

在这里插入图片描述

  • 对象是类的实例
  • 类定义对象的结构,以类为模板创建对象
  • 类包含:方法定义实例共享的数据
  • a = A()a = A的区别(此处A为一个类名)
a=A()

print(a) #<__main__.A object at 0x0000020A69C81780>

a=A

print(a) #<class '__main__.A'>

print(A) #<class '__main__.A'>

分析:

a=A()  是有地址的,这说明他是一个实体,比如 int a  中的 a 一样

a=A    是没有地址的,发现他和A打印的结果一毛一样,这说明他就是A,也就是一个类名,

等价于上一句中 int a 中的 int       

那么也就是说下面这两语句是等价的
b=A()   与   b=a()

则a = A()把A实例化了

1.对象 = 属性 + 方法

  • 封装:信息隐蔽技术
    关键字class定义类,后面跟名称、分号和类的实现(类名约定以大写字母开头
    【例子】
class Turtle:  # Python中的类名约定以大写字母开头
    """关于类的一个简单例子"""
    # 属性
    color = 'green'
    
    # 方法
    def climb(self):
        print('我正在很努力的向前爬...')
        
tt = Turtle() 
print(tt)
# <__main__.Turtle object at 0x0000007C32D67F98>

print(type(tt))
# <class '__main__.Turtle'>

print(tt.__class__)
# <class '__main__.Turtle'>

print(tt.__class__.__name__)
# Turtle

tt.climb()
# 我正在很努力的向前爬...

# Python类也是对象。它们是type的实例
print(type(Turtle))
# <class 'type'>
  • 继承:子类自动共享父类之间数据和方法的机制
    将父类名称放在子类名称后面的括号中
class MyList(list):#MyList是子类,list是父类
  • 多态:不同对象对同一方法响应不同的行动
    多态首先是建立在继承的基础上的,先有继承才能有多态。多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。多态成立的另一个条件是在创建子类时候必须使用父类new子类的方式

2.self

  • self相当于C++ 的 this 指针
  • 类的方法与普通的函数对比只有一个特别的区别 —— 它们必须有一个额外的第一个参数名称(对应于该实例,即该对象本身),按照惯例它的名称是 self。在调用方法时,我们无需明确提供与参数 self 相对应的参数
    【例子】
class A():
    def song(one):
        print(one)
    def sing(self,one):
        print(one)
a=A()
A.sing(a,"hello")  #注意这条语句,结果为hello
a.sing("hello") #hello

A.sing("hello")#TypeError: sing() missing 1 required positional argument: 'one',提示没有给 one 赋值

即调用类class时,首先先需将类的地址赋给一个实例,这样才可以用类中的东西。若没赋值,可通过self当作指针,指出该类名的地址,进行应用

3.Python 的魔法方法

类有一个名为__init__(self[, param1, param2...])的魔法方法,该方法在类实例化时会自动调用
(见14章)

4.公有和私有

  • 私有变量的定义:在变量名或函数名前加上“__”两个下划线
  • 私有属性在类外部无法直接访问

5.继承

派生类的定义如下:

class DerivedClassName(BaseClassName)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值