Python学习笔记(36-40)类和对象

学习主题:类和对象
学习日期:2020-02-09
Python 版本:3.7.4
学习说明:这里很难,尤其是第一次接触面向对象这个概念,我下面写的也不是很好很明白。

第36讲 对象的概念
对一个物体怎么描述的。
比如这个物体就是狗
狗的基本特征就是,一个头,四只腿,有毛,有尾巴,等等
狗还能干什么,他能跑,能吃东西也能咬人,能用鼻子闻东西等等。

总结一下:
对象=属性+方法,这里用类可能更准确点,这么就是一个类,Class。
类的中文意思就是:物以类聚。一类人。什么的,就是拥有一样特征的人,比如说酒鬼,对,这么一类人就是爱喝酒,他们有爱喝酒这样的属性,他们有 喝酒这样的本事方法。
对象的概念其实很广的,在Python中一个函数,一个方法,一个变量什么的,都可以称为对象。所以说,Python无处不对象。

  • 定义一个类
#下面就定义了“狗”类
#记住:Python中类名首字母要大写,函数的首字母小写,这样就容易区别了
class  Dog:
    #属性
    legs=4
    head=1
    mouth=1

    #方法
    def beat(self):
        print('dog can beat ')
    def run(self):
        print('dog can run')
    def smell(self):
         print('dog can smell')
  • 调用“类”
>>> 
 RESTART: C:/Users/SNIPER/AppData/Local/Programs/Python/Python37/SniperPyWorks/game4.py 
>>> d=Dog()
>>> d
<__main__.Dog object at 0x0000000002F65B08>
>>> type(d)
<class '__main__.Dog'>
>>> d.legs
4
>>> d.beat
<bound method Dog.beat of <__main__.Dog object at 0x0000000002F65B08>>
>>> d.beat()
dog can beat 
>>> 

OO是什么?
即就是orient object 面向对象的意思

OO的特征:封装,继承,多态。

#继承举例说明
>>> class list1(list):
	pass
>>> list2=list1()
>>> list2.append(1)
>>> list2
[1]
#举例说明什么是多态
#定义一个类A
>>> class A:
	def fun(self):
		print('i am A')

#定义一个类B		
>>> class B:
	def fun(self):
		print('i am B')

		
>>> a=A()
>>> b=B()
>>> a.fun()
i am A
>>> b.fun()
i am B
#发现上面同样是fun函数,但是结果不同,所以这就是 多态

第37讲 面向对象编程

self是什么?
Python 的self 相当于 C++ self的this指针
公有和私有?
Python是伪私有

第38讲 继承
让相似的进行传递,不用再重新写。这种办法就叫做 继承。
被继承的叫:基类(或叫父类,超类 )
继承者叫:子类
用法如下:

#DerviedClassName  子类
#BaseClassName     基类(或叫父类,超类 )
class DerviedClassName(BaseClassName):
    ...

举个栗子

>>> class Parent:
	def hello(self):
		print('正在调用父类的方法...')

		
>>> class Child(Parent):
	pass

>>> p=Parent()
>>> p.hello()
正在调用父类的方法...
>>> c=Child()
>>> c.hello()
正在调用父类的方法...
>>> 

>>> class Parent:
	def hello(self):
		print('正在调用父类的方法...')

>>> class Child(Parent):
	def hello(self):
		print('正在调用  子类 的方法')

		
>>> 
>>> c=Child()
>>> c.hello()
正在调用  子类 的方法

super 函数的使用。

多继承的使用。

扫描二维码关注公众号,回复: 9085799 查看本文章

第39讲 一些概念

组合

>>> class Classmate:
	def __init__(self,y):
		self.num=y

		
>>> class Teacher:
	def __init__(self,x):
		self.num=x

		
>>> class Classroom:
	def __init__(self,x,y):
		self.teacher=Teacher(x)#实例化
		self.classmate=Classmate(y)#实例化
	def print_num(self):
		print('教室里面有老师 %d 名,学生 %d 名'% (self.teacher.num,self.classmate.num))

>>> classroom=Classroom(1,40)
>>> type(classroom)
<class '__main__.Classroom'>
>>> classroom.print_num
<bound method Classroom.print_num of <__main__.Classroom object at 0x0000000002FAA988>>
>>> classroom.print_num()
教室里面有老师 1 名,学生 40

以上就是一个组合的例子。就是把几个没有继承关系,一般是横向平行关系的几个类,把之实例化放在一起。

类,类对象,实例对象

#C是类 定义
>>> class C:
	num=0
#a,b为 实例对象,下面的C是类对象
>>> a=C()
>>>> a.num
0
>>> a.num=10
>>> a.num+=5
>>> a.num
15
>>> b=C()
>>> b.num
0

如果,属性和方法相同,那么会出现什么问题

>>> class C:
	def x(self): #x方法
		print('x!!')
		
>>> c=C()
>>> c.x()
x!!
>>> c.x=1
>>> c.x #查看属性
1
>>> c.x()#查看方法
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    c.x()
TypeError: 'int' object is not callable
#z这里已经报错了

因此,要注意:

  • 不要试图在一个雷里边定义出所有能想到的特性和方法,应该要利用继承和 组合机制来进行扩展。
  • 用不同的词性命名,如属性名用名词,方法用动词。

绑定
Python 严格要求方法需要有实例才能被调用,这种限制其实就是Python 所谓的绑定概念。

第40讲 一些相关的BIF

#issubclass(class,classinfo)
>>> class A:
	pass

>>> class B(A):
	pass


>>> issubclass(B,A)
True


>>> class C:
	pass

>>> issubclass(B,C)
False
#hasattr(object,name)测试一个对象里面是否有某个属性
#注 attr的全称为attribute ,属性的意思


#getattr(object,name[,default])
#setattr(object,name,value)
#property

发布了81 篇原创文章 · 获赞 57 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/hahahahhahha/article/details/104242309