python学习笔记之--面向对象技术

时间:2019-10-22
本文章向大家介绍python学习笔记之--面向对象技术,主要包括python学习笔记之--面向对象技术使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

类:①属性(类变量和实例变量)

       ②方法(实例方法、类方法和静态方法)


类的定义

使用class语句来创建一个新类,class之后为类的名称,类名后有一括号,括号中为基类(可以有多个基类)然后以冒号结尾

类比说明:
生产杯子,杯子的模具(类),可以设定不同的参数来生产杯子。
设定好不同的参数(通过构造函数传参)
生产出具体的杯子(实例化)

#用class关键字来定义一个类
class Person:
    """文档字符串"""

    def __init__(self,name,age):
        if isinstance(age,int) and age >0:
            self.age = age
        else:
            self.age = 0
        self.name = name
        

    def set_age(self,age):
        if isinstance(age,int) and age >0:
            self.age = age


    def get_age(self):
        return self.age


p1=Person("wulaoshi",18)
p2=Person("lilaoshi",28)

类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。


 各种名词的实例示意

class Person:
    x=0  #类变量

    def __init__(self,name): #构造函数:只有在实例化的时候才会调用
        self.name = name  #实例变量
        Person.x+=1

    def get_name(self):#实例方法
        print(self.name)

p1=Person("wulaoshi")  #实例化:类名+()+参数
p2=Person("laoli")
p3=Person("laoli")

print(Person.x) #用类名.类变量来访问类变量;也可以用实例名来访问
print(p1.x)   #用实例名.来访问类变量
print(p2.x)
总结:
实例化:p2=Person("laoli")
实例对象:p2
实例方法:get_name
类变量:x
实例变量:self.name

 实例化

#不需要写构造函数也可以做实例化
class P:
    pass
 
p=P() #这就是一个简单的实例化
#写构造函数的实例化例子:
  思考:既然可以不写构造函数来做实例化,那为什么还要写构造函数来做实例化呢?
      答:当你需要传一些参数来生成实例的时候就需要构造函数来实现了(比如生成一个杯子的模具,需要长宽高能参数)
class Person:
    def __init__(self,name):
        self.name = name
 
p=Person("老王") #需要传参
print(p.name)

 类变量

#类变量:所有的实例都可以访问,可以理解为全局变量;放在方法的外面
'''
类内存:
存类的方法
类变量
'''
为什么要存在类变量?类变量可以用在什么地方?
场景:我想记录一下总共生成了多少个实例?这个时候就可以用类变量
class Person:
    x=0  #类变量

    def __init__(self,name):
        self.name = name
        Person.x+=1  #类名.类变量 来访问类

    def get_name(self):
        print(self.name)

p1=Person("wulaoshi")
p2=Person("laoli")
p3=Person("laoli")

print(Person.x)
print(p1.x)
print(p2.x)

 运行结果:

E:\>py -3 a.py
3
3
3


 实例变量


 属性和方法的访问
class Person:
    count = 0 #类变量
    nation = "中国"

    def __init__(self,name,gender):
        self.name = name
        self.gender = gender
        Person.count +=1

    def get_name(self):#实例方法,必须要实例化
        return self.name
    #类方法:可以使用类变量,不能使用实例变量
    #通过类名来使用,类名.get_instance_count()
    #也可以通过实例调用,实例对象.get_instance_count()
    @classmethod
    def get_instance_count(cls):
        return Person.count

    @classmethod
    def create_a_instance(cls):
        return Person("","")

    @staticmethod   #静态方法:不需要self和cls
    def get_nation():
        return Person.nation

wulaoshi = Person("吴老师","Male") #实例化
#访问类变量的两种方式:
'''
①类名.类变量
②实例名.类变量
'''
print("类变量的调用方法:")
print(Person.count)
print(wulaoshi.count)

#访问实例变量的方法:
'''
①实例名.实例变量
②实例化.实例变量
'''
print("实例变量的调用方法:")
print(wulaoshi.name)
print(Person("吴老师","Male").name)

#访问实例方法的三种方式:
'''
①实例名.实例方法()
②实例化.实例方法()
③类名.实例方法(实例名)
'''
print("实例方法的调用方法:")
print(Person("吴老师","Male").get_name())
print(wulaoshi.get_name())
print(Person.get_name(wulaoshi))

#访问类方法的两种方式:
'''
①类名.类方法()
②实例化.类方法()
'''
print("类方法的调用方法:")
print(Person.get_instance_count())
print(Person("吴老师","Male").get_instance_count())

#访问静态方法的两种方式:
'''
①类名.静态方法()
②实例化.静态方法()
'''
print("静态方法的调用方法:")
print(Person.get_nation())
print(Person("吴老师","Male").get_nation())

E:\>py -3 a.py
类变量的调用方法:
1
1
实例变量的调用方法:
吴老师
吴老师
实例方法的调用方法:
吴老师
吴老师
吴老师
类方法的调用方法:
3
4
静态方法的调用方法:
中国
中国

原文地址:https://www.cnblogs.com/wenm1128/p/11698769.html