python类与对象基本语法

面向对象编程的2个非常重要的概念:类和对象。

对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类。

本人学习笔记基于python2的版本进行测试。

定义一个类

class person:
        age=10
        #下面sex没有进行初始化是会报错的
        #sex
        name="intsmaze"
        def getPersonInfo(self):
                print("age is %d;name is %s"%(self.age,self.name))

必须要进行tab缩进来区分类的成员,同时类的属性必须指定一个值,否则会报NameError: name '_person__age' is not defined错误。

创建类的对象

vi demo.py

class person:
       age=10
       name="intsmaze"
        def getPersonInfo(self):
                print("age is %d;name is %s"%(self.age,self.name))

python demo.py

age is 10;name is intsmaze
10
sex is man

  创建对象的格式为:对象名 = 类名()。

  这里的name和age都是公有的,可以直接在类外通过对象名访问,如果想定义成私有的,则需在前面加2个下划线 即'__',当然也可以在类创建对象后,向对象添加属性。

vi demo2.py

class person:
       __age=10
        __name="intsmaze"
        def getPersonInfo(self):
                print("age is %d;name is %s"%(self.__age,self.__name))

ly=person()
ly.getPersonInfo()
print(ly.__age)

python demo2.py

age is 10;name is intsmaze
Traceback (most recent call last):
  File "class2.py", line 9, in <module>
    print(ly.__age)
AttributeError: person instance has no attribute '__age'

  私有属性是不能够在类外通过对象名来进行访问的。在Python中没有像C++中public和private这些关键字来区别公有属性和私有属性,它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。

类的方法

  在类中可以定义一些方法,定义方法采用def关键字,在类中定义的方法至少会有一个参数,一般以名为self的变量作为该参数(用其他名称也可以),而且需要作为第一个参数。

vi demo3.py

class person:
        __age=18
         def getPersonInfo(self):
                print("age is %d"%self.__age)
        def getPersonInfo2(self,age):
                if(self.__age<age):
                        print("too old")
                else:
                        self.__age=age
                        print("age is %d"%self.__age)

ly=person()
ly.getPersonInfo()
ly.getPersonInfo2(20)
ly.getPersonInfo2(10)

  python中没有重载的概念,即不能方法重载。

python demo3.py

age is 18
too old
age is 10

所谓的self,可以理解为自己。可以把它当做C++中类里面的this指针一样理解,就是对象自身的意思,在用某个对象调用该方法时,就将该对象作为第一个参数传递给self。

类的构造器

vi demo4.py

class person:
        __name="intsmaze"
        def __init__(self):
                self.__age=20
                self.__name="liuyang"
        def getPersonInfo(self):
                print("age is %d;name is %s"%(self.__age,self.__name))

ly=person()
ly.getPersonInfo()

python demo4.py

age is 20;name is liuyang

对象在默认调用__init__()方法的时候传递一些参数

vi demo5.py

class person:
        __name="intsmaze"
        #def __init__(self):
        #       self.__age=20
        #       self.__name="liuyang"
        def __init__(self, age, name):
            self.__age = age
            self.__name = name
        def getPersonInfo(self):
                print("age is %d;name is %s"%(self.__age,self.__name))
#ly=person()
#ly.getPersonInfo()
ly=person(100,"hello")
ly.getPersonInfo()

python demo5.py

age is 100;name is hello

  构造器也不能重载,如果把上面的注释去掉,调用脚本将会报错。构造器方法,在创建一个对象时默认被调用,不需要手动调用。

析构

  创建对象时,默认调用构造方法;当删除一个对象时,同样也会默认调用一个方法,这个方法为析构方法

vi dem6.py

# 创建对象
#encoding=utf-8
class Animal():
       # 构造方法
        def __init__(self):
            print '---构造方法被调用---'
        # 析构方法
        def __del__(self):
            print '---析构方法被调用---'
# 创建对象
dog = Animal()
# 删除对象
del dog

python dem6.py

---构造方法被调用---
---析构方法被调用---

打印对象

class person:
        __name="intsmaze"
        def __str__(self):
                return "my name is "+self.__name
ly=person()
print(ly)

如果不重写__str__方法,则print(ly)将打印该对象的内存地址。

原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6690314.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维技术迷

连仕彤博客[Python笔记] locals() 函数

1563
来自专栏python3

python 内置函数

基本的数据操作基本都是一些数学运算(当然除了加减乘除)、逻辑操作、集合操作、基本IO操作,然后就是对于语言自身的反射操作,还有就是字符串操作。

1202
来自专栏java学习

java每日一练(2017/8/11)

查看以前的所有练习题目以及答案:https://mp.weixin.qq.com/mp/homepage?__biz=MzA5MTMyNTI0Nw==&hid=...

2976
来自专栏Laoqi's Linux运维专列

文件类型+变量+数值字符串

2086
来自专栏java初学

final和static关键字

36211
来自专栏数据结构与算法

2058 括号序列

2058 括号序列  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解  查看运行结果 题目描述 Descript...

3329
来自专栏黑泽君的专栏

函数和方法的区别

853
来自专栏大闲人柴毛毛

稳扎稳打JavaScript(三)——创建对象的几种方式

有了前面两篇文章的基础后,我们来谈一谈在JS中创建对象的几种方式。 建议大家先预习下先前的两篇博客: 稳扎稳打JavaScript(一)——作用域链 ...

4454
来自专栏C/C++基础

C++学习知识点

答:多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。 C++中,实现多态有...

782
来自专栏杨龙飞前端

js中的valueOf与toString

2754

扫码关注云+社区

领取腾讯云代金券