关于构造函数的扩展写法与类的扩展功能写法区别

- 构造函数的扩展功能写法如下:
  class A():
  pass
  class B(A):
  def __init__(self,name,adr):
  print("B")
  print(name)
  print("adr")
  class C(B):
  def __init__(self,name,adr):#先初始化父类中的参数
  # C中想扩展B的构造函数后添加功能
  #方法1:
  #B.__init__(self,name)
  #方法2:
  #首先调用父类构造函数
  super(C, self).__init__(name,adr)
  #以下是添加的功能
  age = 18
  print("年龄是{0}".format(age))
   
   
   
  c=C("xiaojia
   
  #类的扩展功能写法如下:
  #子类扩充父类功能案例
  #人由工作的函数 老师也有工作函数,但老师工作需要讲课
  class Person():
  name = "NoNanem"
  age = 18
  __score = 0 #年龄是秘密,只能自己知道
  _petname = "sec"# 小名,是保护的,子类可以用,但不能公用
  def sleep(self):
  print("Sleeping ....")
  def work(self,adr):
  print("adr is ")
  print("make some money")
   
   
  # 父类写在括号里面
  class Teachar(Person):
  teachar_id = "9527"
  name = "XIAOJIA"
  def make_test(self):
  print("attention")
  def work(self,adr):
  #扩充父类的功能只需要调用父类相同的函数
  #方法1
  Person.work(self,adr)
  #方法2 super代表得到父类
  # super().work()
  #self.make_test()
   
  t=Teachar()
  t.work(" mingxi")
   
  区别:
  1: 构造函数的方法一:
  父类名.__init__(self,参数) 参数的有无根据父类参数来匹配
  类的方法一:
  父类名.父类函数名(self,参数) 参数的有无根据父类参数来匹配
  2: 构造函数方法二:super
  super.(自身类名,self).__init__(除self以外的父类参数) 参数的有无根据父类参数来匹配
  类的方法二:super
  super().父类函数名()

原文地址:https://www.cnblogs.com/aiguozhuyizhe/p/9332809.html

时间: 2024-10-01 23:13:24

关于构造函数的扩展写法与类的扩展功能写法区别的相关文章

扩展C++ string类

在实际开发过程中,C++string类使用起来有很多不方便的地方,笔者根据根据这些不足简单的扩展了这个类,如增加与数字之间的相互转化和格式化字符串.不足的地方望指正.读者也可以根据自己需求继续扩展. 头文件:exstring.h [cpp] view plaincopy /* Author: wuqiang Email:  [email protected] Description:exstring is a subclass of basic_string.It is added some u

类模板的写法

类模板的写法 定义一个类模板: Template < class或者也可以用typename T > class类名{ //类定义...... }; 说明:其中,template是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个. 例如:定义一个类模板: // ClassTemplate.h #ifndef ClassTemplate_HH #define ClassTemplate_HH template<typename T1,typename T2> c

扩展 WPF 动画类

原文:扩展 WPF 动画类 扩展 WPF 动画类                                                                     Charles Petzold                                                                     http://msdn.microsoft.com/msdnmag/issues/07/07/Foundations/Default.aspx?l

类的扩展--类目--ios

person+money.h  这是类目类 #import "Person.h" //这是扩展person类的接口类,独立一个文件 @interface Person (Money) -(void) haveMoney; @end person+money.m 这是类目类 #import "Person+Money.h" //这是扩展person类的实现类,独立一个文件 @implementation Person (Money) -(void) haveMoney

类族的写法

http://mdsa.51cto.com/art/201507/484133_4.htm 这个模式的精妙的地方在于,调用者可以完全不管子类,事实上,这可以用在设计一个库,可以用来交换实际的返回的类,而不用去管相关的细节,因为它们都遵从抽象超类的方法. 我们的经验是使用类簇可以帮助移除很多条件语句. 一个经典的例子是如果你有为 iPad 和 iPhone 写的一样的 UIViewController 子类,但是在不同的设备上有不同的行为. 比较基础的实现是用条件语句检查设备,然后执行不同的逻辑.

C# 类的规范写法

私有变量写在最上面,简单变量在上,复杂类型在下,以下划线_开头 类的常量紧随其后 不提供公共变量,所有变量以属性的方式对外开放 变量之后是属性 属性之后是方法,构造方法在最上方 公共方法随其后 最后是私有方法 例子: 1 public class SimpleClass 2 { 3 private int _num; 4 private string _word; 5 private static readonly TimeZone _timeZone; 6 private const doub

Objective-C,如何在不使用类继承的情况下,扩展已有类的实现

在Objective-C 2.0中,有2种办法可以在不使用类继承的情况下,扩展已有类的实现.一种是分类(Category),另一种是类扩展(Class Extensions). 前者可以在没有已有类的源代码的情况下扩展类的实现.可以定义新的方法,但不能定义实例变量. 后者必须有已有类的源代码才能实现扩展.但是相比分类,类扩展还可以定义实例变量,并且隐藏这些信息.也就是说,类扩展是一种定义私有变量和私有方法的手段. Objective-C,如何在不使用类继承的情况下,扩展已有类的实现

C++中的链表节点用模板类和用普通类来实现的区别

C++中的链表节点通常情况下类型都是一致的.因此我们可以用模板来实现. #include <iostream> using namespace std; template<typename Type>//定义一个模板类必须有的声明 class LinkNode //表示链表节点的类 { public: LinkNode() :m_pnext(nullptr){}//构造函数,在函数体内实现的相当于默认在前面加了inline关键字修饰 LinkNode(Type item, Link

C#:类和结构的区别

第一.引用类型和值类型 类属于引用类型,而结构属于值类型. 结构在赋值时进行复制. 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据. 第二.继承性 类可以继承类或者实现接口,而结构只能实现接口,不能继承结构. 第三.实例化 类的实例化需要使用new关键字,但是结构的实例化则可以不使用new关键字. 第四.构造函数 类可以显式地包含无参的构造函数,但是结构却不可以显式地包含无参构造函数,只可以定义带有参数的构造函数. 第五.初始化实例字段 类可以在类的定义中