zoukankan      html  css  js  c++  java
  • Python类和方法

    类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类是一个模板,它描述一类对象的状态和行为,把这个模板实现以后,就是一个对象

    类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

    数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。

    方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

    局部变量:定义在方法中的变量,只作用于当前实例的类。

    实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。

    继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。

    实例化:创建一个类的实例,类的具体对象。

    方法:类中定义的函数。

    对象:对象是类的一个实例,有状态和行为。对象包括两个数据成员(类变量和实例变量)和方法。

    python主方法入口:if __name__ == '__main__':

    Python3中的object为所有类的基类,所有类在创建时默认继承object,所以不声明继承object也可以,如:class className(object): 与  class className():

    类下面方法的创建同样适用关键字def,唯一不同的是,方法的第一个参数必须是存在的,一般习惯命名为'self',但是在调用这个方法时不需要为这个参数传值.类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

    一般在创建类时会首先声明初始化方法__init__(),类似于java中的构造函数.__init__()方法是一种特殊的方法,当创建了这个类的实例时就会调用该方法

    使用点号 . 来访问对象的属性,还可以添加,删除,修改类的属性

    在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数

    类中函数体之外的变量叫类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 类名.变量 访问。

    如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。

    子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。

    如果重写了__init__ 时,要继承父类的构造方法,可以使用 super 关键字:super(子类,self).__init__(参数1,参数2,....)还有一种经典写法:父类名称.__init__(self,参数1,参数2,...)

    1 class person():
    2     def __init__(self,name):
    3         self.name = name
    4     def sayHi(self):
    5         print('Hello,my name is',self.name)
    6 if __name__ == '__main__':
    7     person('Nancy').sayHi()
    8 #运行结果
    9 Hello,my name is Nancy
     1 class A(object):#创建一个类,类名为A,继承object.
     2                 # python3中object为所有类的基类,所有类在创建时默认集成object,所以不声明继承object也可以.
     3     def add(self,a,b):#类A中有一个方法add
     4         return a+b
     5 class B(A):#类B继承类A,具有类A的所有方法
     6     def sub(self,a,b): #类B除了继承外,自己还新增了方法.可以理解为徒弟继承了师傅的所有技能,又自学了其他技能
     7         return a-b
     8 if __name__ == '__main__':#python主方法入口,可理解为执行入口,从此开始执行
     9     count1 = A()
    10     print(count1.add(5,9))
    11     count2 = B()
    12     print(count2.add(5,9))#调用执行类B中的add方法
    13     print(count2.sub(5,9))#调用执行类B中的sub方法
    14 #运行结果
    15 14
    16 14
    17 -4
     1 class Employee():
     2     empCount = 0
     3     def __init__(self,name,salary):
     4         self.name = name
     5         self.salary = salary
     6         Employee.empCount += 1
     7     def displayCount(self):
     8         print("Total Employee %d" % Employee.empCount)
     9     def displayEmployee(self):
    10         print("Name:",self.name,",Salary:",self.salary)
    11 emp1 = Employee("Nancy",2000)
    12 emp2 = Employee("Lucy",5000)
    13 emp1.displayEmployee()
    14 emp2.displayEmployee()
    15 print("Total Employee %d" % Employee.empCount)
    16 #运行结果
    17 Name: Nancy ,Salary: 2000
    18 Name: Lucy ,Salary: 5000
    19 Total Employee 2
     1 class Employee():
     2     empCount = 0#empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。
     3     def __init__(self,name,salary):
     4         self.name = name
     5         self.salary = salary
     6         Employee.empCount += 1
     7     def displayCount(self):
     8         print("Total Employee %d" % Employee.empCount)
     9     def displayEmployee(self):
    10         print("Name:",self.name,",Salary:",self.salary)
    11 emp1 = Employee("Nancy",2000)#创建Employee类的第一个对象
    12 emp2 = Employee("Lucy",5000)#创建Employee类的第二个对象
    13 emp1.displayEmployee()#调用Employee类的displayEmployee方法
    14 emp2.displayEmployee()#调用Employee类的displayEmployee方法
    15 print("Total Employee %d" % Employee.empCount)#empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。
    16 #运行结果 17 Name: Nancy ,Salary: 2000 18 Name: Lucy ,Salary: 5000 19 Total Employee 2

    继承:

    如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。

    子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。

    如果重写了__init__ 时,要继承父类的构造方法,可以使用 super 关键字:super(子类,self).__init__(参数1,参数2,....)还有一种经典写法:父类名称.__init__(self,参数1,参数2,...)

     1 class Son(Father):
     2     def getName(self):
     3         return 'Son ' + self.name
     4 
     5 
     6 if __name__ == '__main__':
     7     son = Son('runoob')
     8     print(son.getName())
     9 #运行结果
    10 name: runoob
    11 Son runoob
    12 #子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__
     1 class Father(object):
     2     def __init__(self, name):
     3         self.name=name
     4         print ( "name: %s" %( self.name))
     5     def getName(self):
     6         return 'Father ' + self.name
     7  
     8 class Son(Father):
     9     def __init__(self, name):
    10         super(Son, self).__init__(name)
    11         print ("hi")
    12         self.name =  name
    13     def getName(self):
    14         return 'Son '+self.name
    15  
    16 if __name__=='__main__':
    17     son=Son('runoob')
    18     print ( son.getName() )
    19 #运行结果
    20 name: runoob
    21 hi
    22 Son runoob



  • 相关阅读:
    Oracle函数如何把符串装换为小写的格式
    Oralce中的synonym同义词
    JS中getYear()的兼容问题
    How to do SSH Tunneling (Port Forwarding)
    所谓深度链接(Deep linking)
    upload size of asp.net
    发一个自动刷网站PV流量的小工具
    解决Visual Studio 2008 下,打开.dbml(LINQ) 文件时,提示"The operation could not be completed." 的问题。
    在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录
    使用SQL语句获取Sql Server数据库的版本
  • 原文地址:https://www.cnblogs.com/yaoze2018/p/10744661.html
Copyright © 2011-2022 走看看