Crossin的编程教室

标题: 【Python 第48课】 面向对象(2) [打印本页]

作者: crossin先生    时间: 2013-8-8 20:42
标题: 【Python 第48课】 面向对象(2)
昨天介绍了面向对象的概念,今天我们来创建一个类。
  1. class MyClass:
  2.     pass

  3. mc = MyClass()
  4. print mc
复制代码
关键字class加上类名用来创建一个类。之后缩进的代码块是这个类的内部。在这里,我们用pass语句,表示一个空的代码块。

类名加圆括号()的形式可以创建一个类的实例,也就是被称作对象的东西。我们把这个对象赋值给变量mc。于是,mc现在就是一个MyClass类的对象。

看一下输出结果:
  1. <__main__.MyClass instance at 0x7fd1c8d01200>
复制代码
这个意思就是说,mc是__main__模块中MyClass来的一个实例(instance),后面的一串十六进制的数字是这个对象的内存地址。

我们给这个类加上一些域:
  1. class MyClass:
  2.     name = 'Sam'

  3.     def sayHi(self):
  4.         print 'Hello %s' % self.name

  5. mc = MyClass()
  6. print mc.name
  7. mc.name = 'Lily'
  8. mc.sayHi()
复制代码
我们给MyClass类增加了一个类变量name,并把它的值设为'Sam'。然后又增加了一个类方法sayHi。

调用类变量的方法是“对象.变量名”。你可以得到它的值,也可以改变它的值。

注意到,类方法和我们之前定义的函数区别在于,第一个参数必须为self。而在调用类方法的时候,通过“对象.方法名()”格式进行调用,而不需要额外提供self这个参数的值。self在类方法中的值,就是你调用的这个对象本身。

输出结果:
  1. Sam
  2. Hello Lily
复制代码
之后,在你需要用到MyClass这种类型对象的地方,就可以创建并使用它。


#==== Crossin的编程教室 ====#
微信ID:crossincode
QQ群:312723402

面向零基础初学者的编程课
每天5分钟,轻松学编程


作者: byron    时间: 2013-8-8 22:39
多看两遍,看不懂啊,亚历山大。
作者: cyin15288    时间: 2013-8-9 11:53
看了文字教程和视频教程才能懂self什么意思!和javascript中的this一个样!
作者: crossin先生    时间: 2013-8-9 11:59
byron 发表于 2013-8-8 22:39
多看两遍,看不懂啊,亚历山大。

这个东西确实一下子不好理解
我想办法再举点实例
作者: liu-pengfei    时间: 2014-9-27 00:06
看了几天的面向对象,好像有一点点懂了。
作者: 草办    时间: 2015-12-10 16:19
get
作者: exchen    时间: 2016-4-21 18:10
函数和类的区别是什么啊老师
作者: crossin先生    时间: 2016-4-22 10:59
exchen 发表于 2016-4-21 18:10
函数和类的区别是什么啊老师

函数是一种带有输入(参数)和输出(返回值),具有某种功能的方法。
类是定义一种模板,这种模板用来产生对象,每个对象都具有这种模板里定义的各种属性和方法。
作者: PMCoding    时间: 2019-11-29 11:26
本帖最后由 PMCoding 于 2019-11-29 11:49 编辑

第(1)节猜测class object之所以出现,是为了套用一系列属性变化和计算逻辑的,从而更快捷的构建代码逻辑解决相同和类似问题
第(2)节涉及具体例子才清晰一点,有一个问题,请教先生:
#Py3输入
class myclass:
    name='meepo'

    def sayhi(self):
        print('hello%s'%self.name)
kfc=myclass()
print(kfc.name)
kfc.name='kunkka'
print(kfc.sayhi())

#py3输出
meepo
hellokunkka
None

Process finished with exit code 0

#问题
为什么print用了括号后,第三行多输出了一个None的结果,他的逻辑在哪里,
还是已经涉及后面的课程,感谢热心大神解答。
作者: crossin先生    时间: 2019-11-29 12:20
PMCoding 发表于 2019-11-29 11:26
第(1)节猜测class object之所以出现,是为了套用一系列属性变化和计算逻辑的,从而更快捷的构建代码逻辑 ...

是函数的内容
sayhi 函数没有返回值,默认返回 None
你 print 它的结果,就是 None
作者: 宫城良田的女友    时间: 2020-6-4 15:06
想请问crossin先生:
输入
class MyClass:
    pass

mc = MyClass()
print(mc)
得到的是:
<__main__.MyClass object at 0x10d201dc0>
而不是:
<__main__.MyClass instance at 0x7fd1c8d01200>
是为什么呢??
作者: crossin先生    时间: 2020-6-5 14:55
py3有改动,这个不影响,object 和 instance 基本是等同的概念




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5