python类和对象

1.类

python是面向对象的,python的类与java类似有属性和方法构成:如

class Person:
    name = '张三'
    age = 30

    def say(self): 
        print(self.name + '说:我今年%d了' % self.age )
person = Person()
person.say() # 张三说:我今年30了
1.类的封装

如列表的排序方法sort()就是对排序的方法的封装,不需要关系方法里面具体的实现过程,
只需要调用别表封装好的方法即可实现排序功能

2.类的继承

Children类继承Person类,同时也继承了Person的name、age属性和say()方法

class Children(Person):
    pass
children = Children()
children.say() # 张三说:我今年30了

Children重新定义自己的name和age属性

class Children(Person):
    name = '张小二'
    age = 3

children = Children()
children.say() # 张小二说:我今年3了
python中类可以多继承
class Mother:
    def say(self):
        print('母亲的一些方法')

class Pather:
    def work(self):
        print('父亲的方法')

class Child(Mother, Pather): # 孩子类即继承了母亲的一些方法也继承了父亲的方法
    pass

child = Child()
child.say() 
child.work()
3.类的多态
class Animal:
    def __init__(self,name,food): # 构造方法
        self.name = name
        self.food = food
    def eat(self):
        print(self.name + "说:我爱吃-----" + self.food)
cat = Animal('猫','鱼')
cat.eat() # 猫说:我爱吃-----鱼

rabbit = Animal('兔子','胡萝卜')
rabbit.eat() # 兔子说:我爱吃-----胡萝卜

dog = Animal('狗','鱼和兔子')
dog.eat() # 狗说:我爱吃-----鱼和兔子

2.类中变量私有与公有

class Person:
    name = 'zhangsan'
    __age = 20 # 私有变量

p = Person()
print(p.name)
print(p.age) # error 私有变量这样是访问不到的
访问私有变量可以通过下面两种方法访问

1.在类中定义放回方法

class Person:
    name = 'zhangsan'
    __age = 20 # 私有变量 __为两个下划线_ _

    def getAge(self):
        return self.__age
p = Person()
print(p.getAge()) # 20

2.通过类名 + 变量名访问

print(p._Person__age) # 20

3.类、类对象和实例对象

class Count:
    num = 0
a = Count()
b = Count()
c = Count()

print('a---b---c 的num分别为:' + str(a.num)  + ',' +  str(b.num ) + ',' + str(c.num)) 
# a---b---c 的num分别为:0,0,0

a.num = 10
print('a---b---c 的num分别为:' + str(a.num)  + ',' +  str(b.num ) + ',' + str(c.num)) 
# a---b---c 的num分别为:10,0,0

Count.num = 100
print('a---b---c 的num分别为:' + str(a.num)  + ',' +  str(b.num ) + ',' + str(c.num)) 
# a---b---c 的num分别为:10,100,100

4.类的一些内置方法

1.issubclass(a,b) 判断a是否b的子类
class A:
    pass
class B(A):
    pass
class C:
    pass
print(issubclass(A,object)) # True
print(issubclass(B,A)) # True
print(issubclass(C,B)) # False
2.instance(object,classinfo) 判断object是否为classinfo的对象
class A:
    pass
class B(A):
    pass
class C:
    pass
b = B()
print(isinstance(b,A)) # True
print(isinstance(b,B)) # True
print(isinstance(b,C)) # False
print(isinstance(b,(A,B,C))) # True
3.hasattr(object,name) 判断object对象是否有name属性
class A:
    def __init__(self,num = 0): # num 必须初始化
        self.num = num
a = A()
print(hasattr(a,'num')) # True

# 给a对象设置name属性,设置默认值为张三
setattr(a,'name','张三')
# 得到 a 对象中的 name 属性,如果不存在,返回第三个提示参数设置的提示信息
print(getattr(a,'name','不存在name属性')) # 张三
print(getattr(a,'age','不存在age属性')) # 不存在age属性
# 删除a中的name属性,如果不存在报错,可先hasattr判断是否存在
print(delattr(a,'name')) # None
4.property(fget=None,fset=None,fdel=None,doc=None)
class A:
    def __init__(self,num = 0):
        self.num = num
    def getNum(self):
        return self.num
    def setNum(self,value):
        self.num = value
    def delNum(self):
        del self.num
    x = property(getNum,setNum,delNum) 
a = A()
print(a.getNum())
print(a.x)
# 通过x设置属性
a.x = 30
print(a.getNum())
print(a.x)
# 删除属性
del a.x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值