python自主学习——对象和类

对象和类

对象就是对数据的抽象。每个对象都将具有id、type、value三个属性

id表示内存地址,可以通过内置函数id()查看,而type表示对象的类别,不同的类别意味着该对象拥有的属性和方法等,可以通过type()来查看

对象既包含数据也包含代码,他是某一类具体事物的特殊实例

一些内置对象:数字——直接使用阿拉伯数字。字符串——'',列表——[].字典——{}函数——def语法

类与实例


class定义类(类对象),与其他对象不同的是,class定义的对象可以用于产生新的对象

class Person():
    pass


def who(obj):
    print(id(obj), type(obj))


someone = Person()
who(someone)

在这个当中,person是我们创建的一个新类,通过调用person()可以获得一个person类型的实例对象,我们可以将其赋值为someone,就成功创建了一个与所有内置对象类型不同的对象someone,他的类型为__main__.person.到这里我们可以将python中的一切对象分为俩两种

  1. 可以用来生成新对象的类,包括内置的int、str以及上面定义的person等
  2. 由类生成的实例对象,包括内置类型的数字、字符串、以及上面定义的类型为__main__.person的someone

在实践中不得不考虑的一些细节性的问题:

  1. 需要一些方便的机制来实现面向对象编程中的继承、承载等待型
  2. 需要一些固定的流程让我们可以在生成实例化对象的过程中执行一些特定的操作

类的方法

初始化方法:__init__传入一个self,一个name

继承

从已有类的衍生出新的类,添加或修改部分功能,能提高代码复用。使用继承得到的新类会自动获得旧类中的所有方法,而不需要进行复制

class A():
    def foo(self):
        print('A.foo')

class B(A):
    def foo(self):
        """覆盖父类中的方法
        """
        # 使用super()调用父类的方法
        super().foo()
        print('B.foo')

    def bar(self):
        """在子类中添加父类中没有的新方法
        """
        print('B.bar')


a = A()
a.foo()
b = B()
b.foo()
b.bar()

#A.foo
#A.foo
#B.foo
#B.bar

在类中封装属性名

python中类的所有特型都是公开的,我们通过一定的属性和命名规约来达到封装

第一个预定就是任何

以但下划线_开头的名字都应该是内部实现的。但是python并不会真正的阻止访问内部名称。但这样做会影响代码。而使用双下划线__会导致访问名变成其他形式

方法类型

在类中定义的方法有三种:

  • 实例方法,以self作为第一个参数,当其被调用时,python会把调用该方法的对象作为self参数传入
  • 类方法:用@classmethod装饰器指定,第一个参数是类本身,通产写作cls,作用于整个类,对类作出的任何改变会对他的所有实例对象产生影响
  • 静态方法:@staticemethod修饰,其参数既不需要self也不需要cls,其功能既不影响类也不影响类的实例,仅仅为了组织代码的方便

常用魔术方法

__lt__(self, other)    self < other
__le__(self, other)    self <= other
__eq__(self, other)    self == other
__ne__(self, other)    self != other
__gt__(self, other)    self > other
__ge__(self, other)    self >= other
__add__(self, other)      加法 +
__sub__(self, other)      减法 -
__mul__(self, other)      乘法 *
__floordiv__(self, other) 整数除法 //
__truediv__(self, other)  真除法 /
__mod__(self, other)      取模算法 %
__divmod___(self, other)  内置divmod()函数
__pow__(self, other)      指数运算 **
__lshift__(self, other)   左移 <<
__rshift__(self, other)   右移 >>
__and__(self, other)      按位与 &
__or__(self, other)       按位或 |
__xor__(self, other)      按位异或 ^
__str__(self)=str(self)——打印对象信息
__repr__(self)=repr(self)——交互式解释器适用此方法
__len__(self)=len(self)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值