Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)

1、创建类的代码:

#在Java中,所有的最终父类都是Object
#在python中也是,一个类没有直接的父类就写入object

class Animal(object):
    #在python中init方法相当于构造器
    #参数列表中,第一个位置是第一个默认的叫做self.也就是实例本身,相当于java的this
    def  __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def running(self):
        print("我是" + self.name + "我在跑....")

#主函数如此定义
if __name__ == '__main__':
    #创建实例
    animal = Animal("旺财",3,"公")
    animal.running()

运行的结果是:
我是旺财我在跑….

2、继承

#在Java中,所有的最终父类都是Object
#在python中也是,一个类没有直接的父类就写入object

class Animal(object):
    #在python中init方法相当于构造器
    #参数列表中,第一个位置是第一个默认的叫做self.也就是实例本身,相当于java的this
    def  __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def running(self):
        print("我是" + self.name + "我在跑....")

#继承一个类时,将类名放在括号中
class Dog(Animal):
    pass

#主函数如此定义
if __name__ == '__main__':
    #创建实例
    animal = Dog("旺财",3,"公")
    animal.running()

3、多态

多态1:在python中,多态是伪多态,方法在定义中需要一个父类的参数,而实际传入是可以传入一个子类。

比如说明(Java工程师)
 可以是:(Java Web工程师)
       (java游戏开发工程师)

后面两者相当于是前者的子类。就是多态的一种现象。

#在Java中,所有的最终父类都是Object
#在python中也是,一个类没有直接的父类就写入object

class Animal(object):
    #在python中init方法相当于构造器
    #参数列表中,第一个位置是第一个默认的叫做self.也就是实例本身,相当于java的this
    def  __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def running(self):
        print("我是" + self.name + "我在跑....")

#继承一个类时,将类名放在括号中
class Dog(Animal):
    pass

class Person(object):
    #打印一个方法
    def printAnimal(self,animal):
        #调用方法
        animal.running()


#主函数如此定义
if __name__ == '__main__':
    #创建实例
    dog = Dog("旺财",3,"公")
    dog.running()
    person = Person()
    person.printAnimal(dog)

运行结果:
这里写图片描述

上面的的Person部分就是就是多态的一种表现。

多态2:多态的鸭子类型
上面person.printAnimal(dog),传入的dog没有被严格检查。只要在传入的变量中同样含有一个running()的方法。这样话,就可以被调用执行。

具体说明:
方法需要一个animal,然后在方法调用animal的某个方法。
如果用户传入的对象不是animal的子类,但是也有对应的方法也行。

鸭子类型的测试:

#在Java中,所有的最终父类都是Object
#在python中也是,一个类没有直接的父类就写入object

class Animal(object):
    #在python中init方法相当于构造器
    #参数列表中,第一个位置是第一个默认的叫做self.也就是实例本身,相当于java的this
    def  __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def running(self):
        print("我是" + self.name + "我在跑....")

#继承一个类时,将类名放在括号中
class Dog(Animal):
    pass

class Person(object):
    #打印一个方法
    def printAnimal(self,animal):
        #调用方法
        animal.running()

class A:
    def running(self):
        print("我是a......")

#主函数如此定义
if __name__ == '__main__':
    #创建实例
    dog = Dog("旺财",3,"公")
    dog.running()
    person = Person()
    person.printAnimal(dog)

    #鸭子类型测试
    a = A()
    a.running()
    person.printAnimal(a)

运行结果:
这里写图片描述

4、获取类的信息

1、如何获取一个变量的类型
Type()
通过type,可以获得是整型,是方法,还是类

通过type,可以看到是方法的类型:
这里写图片描述

2、如何比较一个变量的类型
查看是否是某种类型:

type(a)
    type(person)

    #比较一个类型是否是int
    r = isinstance(a,int)
    print(r)
    r = isinstance(a,str)
    print(r)

这里写图片描述

3、如何查看一个类有多少方法
使用dir(参数)方法
这里写图片描述

4、如果查看一个类有多少属性

#主函数如此定义
if __name__ == '__main__':
    animal = Animal("a","2","sex")
    #通过getattr方法拿animal对象中对应的age的属性值
    r = getattr(animal,"age","默认值")
    print(r)

这里写图片描述

再如:

sex =  getattr(animal,"sex","Ren")
if sex == "Ren":
    setattr(animal,"sex","animal")
    if hasattr(animal,"sex"):
        if getattr(animal,"sex") == "animal":
            print("终于不是人了")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值