Python面向对象(一)

Python面向对象(一)

1、类的创建

语法:class 类名(父类名)

eg: class Animals :

    Color='';

    Age=0;

    Name='';


    def getColor(self):

        return self.Color;

 

class Dog(Animals):

    __Sex = 'Man';

    def say1(self,strname):

        # 调用父类方法

        super().say1(strname);

        print(self.__Sex);

如果没有设置继承的父类,表示直接继承Python的顶层类object

2、属性和方法

在上面的Animals中,Color,Age,Name都是属性,默认是公开的,getColor是函数,也叫方法

 

3、Self的含义

Self表示对象本身,也就是类的一个实例。类的成员方法的第一个参数就是self,因为是形参,你也可以改成其他名字,但是不建议改,约定俗称就是self。通常在调用成员方法时,不要手动传入self,它有解释器自动传入。

 

4、魔法方法 :由Python解释器自动调用的一些内置方法。魔法方法比较多,再次只介绍最常用的2个方法。

4.1 __init__() 方法

此方法属于构造方法,在类实例化的时候由Python解释器自动去调用。

dog=Dog('白色',4,'Dog');  #创建了一个dog对象

Dog.say1('Xiao Hei');

dog=Dog('白色',4,'Dog'); 这一行代码执行时,Python解释器将自动执行方法__init__(),并且会把白色,4,Dog这3个形参传递给__init()__

4.2 __str()__

def __str__(self):

    return ( ('颜色:%s,年龄:%d') % (self.Color,self.Age));

print(dog);

当我们直接调用类的实例时,python解释器就会直接调用方法__str__()。

5、访问控制权限:

默认情况,方法和属性都是公开的。当我们在方法或者属性的前面加上双下划线时,对应的方法和属性就是私有。只能在类的内部可以访问,实例化后,不能再访问了。

class Animals(object) :

    Color='';

    Age=0;

    Name='';

    __sex = 'male';


    def __init__(self,Color,Age,Name):

        self.Color = Color;

        self.Age=Age;

        self.Name=Name;


    def Introduce(self):

        print( ('Name:%s,years:%d,Color:%s,Sex:%s') % (self.Name,self.Age,self.Color,self.__sex));



dog=Animals('白色',4,'Dog');

# dog.Introduce();

dog.__sex;

在这里访问属性__sex 将会抛出异常,私有属性不能在实例中访问

AttributeError: 'Animals' object has no attribute '__sex'

 

接下来我们变通下就可以访问了

class Animals(object) :

    Color='';

    Age=0;

    Name='';

    __sex = 'male';


    def __init__(self,Color,Age,Name):

        self.Color = Color;

        self.Age=Age;

        self.Name=Name;


    def getSex(self):

        return self.__sex;


    def setSex(self,Sex):

        self.__sex = Sex;


dog=Animals('白色',4,'Dog');

print(dog.getSex());

在这里,我们增加了对象属性__sex的Set,Get方法,这样我们就可以通过访问共有方法间接访问属性__sex。这种做法在其他语言中非常常见,将属性设置为私有,只能通过访问才能访问属性。对于方法也是如此,同样有公共和私有的区别,做法也是一样,就不在叙述了。

 

6、Python重载

这个问题的讨论就有点尴尬了,Python的重载就仁者见仁智者见智了。我个人认为,从形式上讲,Python是不存在重载的。在其他开发语言中,重载的定义是:函数名相同,参数类型或者参数数量不相同。从定义上我们就可以看出来,Python的参数是没有类型的,在参数数量上,Python有不定长参数,用列表,元祖,字典完全可以表示出来,并且,Python是根据函数名来区分的,当在同一个类中定义2个相同名称的函数,第二个函数会把第一个函数覆盖掉。所以我个人认为Python不需要重载,也不存在重载。当人这只是我个人的看法,如果有问题,欢迎大家联系我,我目前也是在学习的过程中,边学习边总结,博客只是记录我的学习过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值