Python中的类与对象

认识python中的类的对象和方法

在python中所有的数据(包括数字和字符串)实际上都是对象,同一类型的对象都有相同的类型。我们可以使用type()函数获取关于对象的类型信息。

>>>n=5
>>>type(n)
<type'int'>
>>>s='hi'
>>>type(s)
<type'str'>
>>>t=True
>>>type(t)
<type'bool'>

在上面命令中,将5赋值给n,n的数据类型是int;将字符串’hi’赋值给s,s的数据类型是str;将True赋值给t,t的数据类型是bool,在python中,一个对象的类型由创建该对象的类决定。
在python中,还可以在一个对象上执行操作。操作是由方法定义的。

>>>s="hello"
>>>s1=s.upper()
>>>s1
HELLO

一个对象调用方法的语法是object.method()。如上面命令运行,将hello赋值给s,s的数据类型是str,str类型里有upper()方法,upper()返回大写字母表示的新字符串,然后将返回值赋值给s1。

类的定义

一般,使用 class 语句来创建一个新类,class之后为类的名称(通常首字母大写)并以冒号结尾,

class <类名>:
     类属性1
     ……
     类属性n
     <方法定义1>
     ……
     <方法定义n>

类的属性

类属性有两种:类属性和实例属性(对象属性)。类属性是在类中方法之外定义的;实例属性是在初始化方法__init__()中定义的,定义时以self为前缀,只能通过对象名访问。
__ init__ ()方法,在创建一个对象时默认被调用,类似Java中构造器。不需要手动调用
__ init__(self)中,默认有1个参数名字为self,必须写。如果在创建对象时传递了2个实参,那么__init__(self)中出了self作为第一个形参外还需要2个形参,例如__init__(self,age,name).第一个self不需要手动传参。
init(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去
python中一个类中只能有一个__init__方法,不支持该方法的重载(类似java中构造器的重载)
每一个对象 都有自己 独立的内存空间,保存各自不同的属性
多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用 传递到方法内部

属性的访问权限

类中的属性根据外部对其访问的权限,分为公有属性、保护属性和私有属性。“单下划线”开始的属性叫做保护属性,只有其本身和子类能访问到这些属性。“双下划线”开始的是私有属性,只有该类本身能访问,即使子类也不能访问到这个属性。在python中,私有属性也可以通过“对象名._ 类名__私有属性名”的方式直接访问私有属性。没有以任何下划线开头的属性是公有属性,在任何地方均可以访问该属性。

类中的方法

python类中有三种方法:
1、实例方法
一般用def定义,使用该方法必须通过一个类的实例来访问。至少传递一个参数,一般用self。
2、类方法
在def的前面加上@classmethod,该方法可以通过类名调用。至少传递一个参数,一般用cls。
3、静态方法
在def的前面加上@staticmethod,该方法既可以通过类的实例调用,也可以通过类名调用。参数可以为空。
实例:

#!/usr/local/bin/python3
#coding=utf-8


class A:
    member = "hello world"
    def __init__(self):
        pass


    #实例方法
    def Print1(self):
        print ("##instance method", self.member)


    def Print2(abc):#参数换为任意单词
        print ("##instance method", abc.member)


    @classmethod
    def Print3(cls):
        print ( "####class method:",cls.member)


    @classmethod
    def Print4(abc):#参数换为任意单词
        print ( "####class method:",abc.member)


    @staticmethod
    def Print5():
        print ("###### static method")


if __name__ == '__main__':
    a = A()
    a.Print1()
    a.Print2()


    A.Print3()
    A.Print4()


    A.Print5()
    a.Print5()

运行结果:

##instance method hello world
##instance method hello world
####class method: hello world
####class method: hello world
######static method
######static method

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值