首页 > 其他 > 详细

OOP object基类

时间:2021-09-02 01:27:45      阅读:16      评论:0      收藏:0      [点我收藏+]

低调的基类--object

  Python中一切皆为对象,类也不例外,类也是一个对象。

       object是所有类的基类。

 

世界上最简单的类

# -*- ecoding: utf-8 -*-
# @ModuleName: samplest_demo
# @Function: 
# @Author: 甲壳虫~~~
# @Time: 2021/8/30 23:04
#@blog:https://www.cnblogs.com/liveforlearn

class A:
    pass
print(A.__class__) #output:<class type>
print(A.__class__.__base__) #output: <class object>

 

 

  每个Python类的定义都会隐式的集成来自object类,类定义就是对type类的一个对象的声明,基类(父类)为object。

         派生自object类中的对象方法,也将继承各自相应的默认实现。某些情况下,基类中一些特殊方法的默认行为,也正是我们想要的。

 

基类中的__init__()

  object最为所有类的基类,已经为__init__方法提供了默认的实现,一般情况下不需要重写这个函数。如果没有对它进行重写,那么在创建对象时不会产生其他变量的实例。

    从下面的例子可以看出超级基类已经实现了__init__()方法。

   

# -*- ecoding: utf-8 -*-
# @ModuleName: samplest_demo
# @Function: 
# @Author: 甲壳虫~~~
# @Time: 2021/8/30 23:04
#@blog:https://www.cnblogs.com/liveforlearn

print(dir(object))
#output:[‘__class__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘]

  

 延迟赋值

e.g:

# -*- ecoding: utf-8 -*-
# @ModuleName: samplest_demo
# @Function: 
# @Author: 甲壳虫~~~
# @Time: 2021/8/30 23:04
#@blog:https://www.cnblogs.com/liveforlearn

class Study:
    def get_knowledge(self):
        return self.learn_time * self.learn_efficiency

s = Study()
s.learn_time, s.learn_efficiency = 3, 2
print(s.get_knowledge()) #output :6

 

 

定义在类Study中的函数get_knowlede在返回值时使用了两个属性,可是没有在任何地方对其进行赋值,但是在Python这是允许的。

但是这样的做法,给调用者带来了潜在的困惑,因此要尽量避免。

 

易错问题

下面来看一个初学者经常出错的问题:

从这里可以看出类中的“self是类实例化产生的对象本身的指代,而不能指代此类本身”

# @ModuleName: samplest_demo
# @Function:
# @Author: 甲壳虫~~~
# @Time: 2021/8/30 23:04
#@blog:https://www.cnblogs.com/liveforlearn

class Study:
    def get_knowledge(self):
        return self.learn_time * self.learn_efficiency

s = Study
s.learn_time, s.learn_efficiency = 3, 2
print(s.get_knowledge()) #output :TypeError: get_knowledge() missing 1 required positional argument: self

 

OOP object基类

原文:https://www.cnblogs.com/liveforlearn/p/15208448.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!