小甲鱼零基础学习python_22 【python中类和对象1】

python的类和对象:


一. 类(class)的定义(属性,方法)

1. python中类名以大写字母开头

2. 属性为各类变量的定义,方法为函数;属性和函数均默认为公有值

a. 公有属性:

class PigWenHao: # python中类名以大写字母开头
    color='green'
    weight='120'
    height='170'
    #属性

    def Hat(self):
        print('his hat is green')
    def like(self):
        print('his lover is yhr')
    def changeColor(self,color):
        self.color=color
    def getColor(self):
        print('this color is :',self.color)
    #方法

调用时可以直接:

zwh = PigWenHao()  #我们需要用class类创建一个实例对象,下文介绍
print(zwh.color)  #对公有属性的直接访问

这里写图片描述

b. 私有属性:

python name mangling名字改编技术实现私有变量 - - 使用双下划线实现私有变量,函数;

class Person:
    __name='zwh'

p=Person()
print(p.name)  #尝试访问私有变量

这里写图片描述

那该怎么访问私有属性呢?

1. 从内部调用私有变量并返回;

class Person:
    __name='zwh'
    def getName(self):
        return self.__name   #从内部返回私有变量

p=Person()
print(p.getName())

这里写图片描述

2. python其实就是通过改名方式隐藏变量,可以通过 _ 类名_ _ 变量名访问私有变量;

print(p._Person__name)   
#访问私有变量,采用_类名__变量名(类名前单下划线,变量名前双下划线)

这里写图片描述


3. 方法括号里的self是什么?python 的self相当于C++的指针;

当一个对象的方法被调用,对象会将自身作为第一个参数传给self参数,其他参数需要用户定义方法时另加;
调用方法时,不需要填写self参数,如果用户有其他的自定义参数,则需要填入。
class Ball:
    name='yhr'
    def setName(self,name):
        self.name=name
    def kick(self):
        print('i am %s who kick me?'%self.name)


a=Ball()
a.setName('A')

b=Ball()
b.setName('B')

c=Ball()


a.kick()
b.kick()
c.kick()

这里写图片描述


4. 类的构造方法: _ _ init_ _(self,param1…)

构造方法:只要实例化一个对象,这个方法就会对象被创建的时候自动被调用

class Ball:
    def __init__(self,name='default'):   #name有默认值,调用时若没有填写name参数,则使用默认值
        self.name=name
    def kick(self):
        print('i am %s who kick me?' % self.name)

a=Ball()
b=Ball('b')

a.kick()
b.kick()

这里写图片描述


二. 对象的创建(instance)

我们需要用class类创建一个实例instance,称为对象;

创建好的一个实例对象 赋值给一个变量,如果不赋值,则python垃圾回收机制可能会回收掉这个对象。
zwh = PigWenHao() 
#创建好的一个实例对象 赋值给zwh  
#如果不赋值,则python垃圾回收机制可能会回收掉
zwh.Hat()
zwh.like()
zwh.getColor()
zwh.changeColor('red')
zwh.getColor()

这里写图片描述


三. 面向对象的特征(object Oriented)

1. 封装
2. 继承
3. 多态

(1) 封装:

封装 封装属性,方法;是一种信息隐蔽技术。

用户不需要了解方法的内部构造,只需调用类的方法即可

类的方法和属性都定义在类内部,被封装。

list1=[2,1,7,5,3]

list1.sort()  #例如列表的一些方法操作,只需要调用即可,不需了解具体实现
list1.append(9)
print(list1)

这里写图片描述


(2) 继承:

继承: 子类自动共享父类之间数据和方法的机制


class list2(list):   #例如list2继承一个list父类
    pass             #pass是一个占位符,表示不做任何事情

listDuixiang = list2()
listDuixiang.append(8)
print(listDuixiang)

这里写图片描述


(3) 多态:

多态:不同对象对同一方法相应不同的行动

class A:
    def fun(self):
        print('i am A....')
class B:
    def fun(self):
        print('i am B....')
a=A()
b=B()
a.fun()
b.fun()

这里写图片描述

可以看到虽然同样是fun()方法,但是由于fun()分别定义在A,B两个类,所以其实是两个不同的实现过程。


猜你喜欢

转载自blog.csdn.net/Aka_Happy/article/details/82146346
今日推荐