DAY13+14.类与对象

No.9类与对象
对象=属性(静态)+方法(动态)
属性实际上就是变量,方法实际上就是函数
1、面向对象的特征
1)封装
2)继承:是子类自动共享父类之间数据和方法的机制
3)多态
2、self(相当于c++中的this指针)
e.g.>>>class Ball:
def setName(self,name):
self.name=name
def kick(self):
print(“我叫%s,谁踢我”%self.name)
>>>a=Ball()
>>>a.setName(‘球A’)
>>>a.kick()
我叫球A,谁踢我
3、init方法(构造方法)
语法:init(self,param1,param2…)
e.g.>>>class Ball:
def init(self,name):
self.name=name
def kick(self):
print(“我叫%s,谁踢我”%self.name)
>>>b=Ball(‘土豆’)
>>>b.kick()
我叫土豆,谁踢我
4、公有和私有
e.g.>>>class Person:
_name=“小机灵”
def getName(self):
return self._name
>>>p=Person()
>>>p._name
出错
>>>p,getName()
‘小机灵’
>>>p._Person_name
‘小机灵’
5、继承
被继承的类称为基类、父类或超类
继承的类称为子类
语法:class DerivedClassName(BaseClassName):
e.g.>>>class Parent:
def hello(self):
print(‘正在调用父类的方法’)
>>>class Child(Parent):
pass
>>>p=Parent()
>>>p.hello()
正在调用父类的方法
>>>c=Child()
>>>c.hello()
正在调用父类的方法
注:如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性
e.g. .>>>class Child(Parent):
def hello(self):
print(‘正在调用子类的方法’)
>>>c=Child()
>>>c.hello()
正在调用子类的方法
>>>p=Parent()
>>>p.hello()
正在调用父类的方法
6、多重继承
同时继承多个父类的属性和方法
语法:class DerivedClassName(Base1,Base2,Base3):
7、组合
e.g.class Turtle:
def init(self,x):
self.num=x
class Fish:
def init(self,x,y):
self.turtle=Turtle(x)
self.Fish=Fish(y)

  def print_num(self):
          print("水池里总共有乌龟%d只,小鱼%d条!"%(self.turtle.num,self.fish.num)
        >>>pool=Pool(1,10)
        >>>pool.print_num()
        水池里总共有乌龟1只,小鱼10条!

8、类、类对象和实例对象
若属性名字与方法名相同,属性会覆盖方法
注:1)不要试图在一个类里面定义出所有能想到的属性和方法,应该利用继承和组合机制进行扩展
2)用不同的词性命名,如属性名用名词,方法名用动词
e.g.>>>class C:
def x(self):
print(“X-man!”)
>>>c=C()
>>>c.x()
X-man!
>>>c.x=1
>>>c.x
1
>>>c.x()
出错
9、绑定
python严格要求方法需要有实例才能被调用
e.g.>>>class BB:
def printBB():
print(“Hail Hydra!”)
>>>BB.printBB()
Hail Hydra!
>>>bb=BB()
>>>bb.printBB()
出错
10、与类和对象相关的一些内置函数
1)issubclass(class,classinfo)
若第一个参数class是第二个参数classinfo的子类,则返回True)
注:a.一个类也会被认为是自身的子类
b.classinfo可以是类对象组成的元素,只要class与其中任何一个候选类的子类,则返回True
e.g.>>>class A:
pass
>>>class B(A):
pass
>>>issubclass(B,A)
True
>>>issubclass(B,B)
True
>>>issubclass(B,object)
True
>>>class C:
pass
>>>issubclass(B,C)
False
2)isinstance(object,classinfo)
检查一个实类对象(object)是否属与这个类
注:a.如果第一个参数不是对象,则永远返回False
b.如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常
e.g.>>>b1=B()
>>>isinstance(b1,B)
True
>>>isinstance(b1,A)
True
>>>isinstance(b1,C)
False
>>>isinstance(b1,(A,B,C))
True
3)hasattr(object,name)
attr=attribute属性
测试一个对象是否有指定的属性
e.g.>>>class C:
def init(self,x=0):
self.x=x
>>>c1=C()
>>>hasattr(c1,‘x’)
True
>>>hasattr(c1,x)
出错
4)getattr(object,name[,default])
返回对象指定的属性值,如果指定的属性不存在,(如果自己设置了default)它会把default参数打印出来,否则会抛出AttributeError的异常
e.g.>>>getattr(c1,‘x’)
0
>>>getattr(c1,‘y’)
出错
>>>getattr(c1,‘y’,“您所访问的属性不存在”)
您所访问的属性不存在
5)setattr(object,name,value)
可以设置对象中指定属性的值,如果指定属性不存在,则会新建一个属性,并给这个属性赋值
e.g.>>>setattr(c1,y,‘tune’)
>>>setattr(c1,‘y’,“您所访问的属性不存在”)
tune
6)delattr(object,name)
删除对象中指定的属性,若属性不存在,则抛出AttributeError的异常
e.g.>>>delattr(c1,‘y’)
>>>delattr(c1,‘y’)
出错
7)property(fget=None,fset=None,fdel=None,doc=None)
通过属性来设置属性
e.g.在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值