Python之学习笔记(面向对象编程)

面向对象编程

# -*- coding: utf-8 -*-

'数据封装、继承和多态是面向对象的三大特点'

__anthor__ = 'Chen Yu'

import types

class Student(object): # 继承的类的名字叫做objecy
    """docstring for Student"""
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def print_score(self):
        print '%s:%s' % (self.name,self.score)
    def get_grade(self):
        if self.score   >= 90:
            print 'A'
        elif self.score >= 80:
            print 'B'
        elif self.score >= 70:
            print 'C'
        elif self.score >= 60:
            print 'D'
        else:
            print 'E'

bart = Student('Bart Simpson',100)
print bart
print bart.name,bart.score
bart.age = 8     # 可以自行增加属性
print bart.age

bart2 = Student('Bart Simpson',100)
bart2.print_score()
bart2.get_grade()

# 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,
# 在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),
# 只有内部可以访问,外部不能访问
class Student2(object):
    """docstring for Student2"""
    def __init__(self, name, score):
        self.__name = name
        self.__score = score
    def print_score(self):
        print '%s:%s' % (self.__name,self.__score)
    def get_grade(self):
        if self.__score   >= 90:
            print 'A'
        elif self.__score >= 80:
            print 'B'
        elif self.__score >= 70:
            print 'C'
        elif self.__score >= 60:
            print 'D'
        else:
            print 'E'
    def get_name(self):
        return self.__name
    def get_score(self):
        return self.__score

# 在Python中,变量名类似__xxx__的,也就是以双下划线开头,
# 并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,
# 不是private变量,所以,不能用__name__、__score__这样的变量名
# 不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,
# 所以,仍然可以通过_Student__name来访问__name变量

### 继承
class Animal(object):
    """docstring for Animal"""
    def __init__(self):
        pass
    def run(slef):
        print 'Animal is running'

class Dog(Animal):
    def __init__(self):
        pass
    def eat(slef):
        print 'Eating meat...'
    def run(slef): # 都有的时候就运行Dog里面的
        print 'Dog is running...'

class Cat(Animal):
    def __init__(self):
        pass
    def run(self):
        print 'Cat is running...'

def run_twice(animal):
    animal.run()
    animal.run()

print run_twice(Animal())
print run_twice(Dog())
print run_twice(Cat())

dog = Dog()
dog.run()

cat = Cat()
cat.run()       

### 获取对象类型
print type(abs)
print type(123)==type(456)
print type('abc')==types.StringType
print type(u'abc')==types.UnicodeType
print type([])==types.ListType
print type(str)==types.TypeType

### 判断class类型
print isinstance(cat,Cat)
print isinstance(cat,Dog)

### dir
# 获取对象的所有属性和方法
print dir(Dog)
print dir('ABC')
# getattr()、setattr()以及hasattr()用来判断属性,设置属性,获取属性
class MyObject(object):
    def __init__(self):
        self.x = 9
    def power(self):
        return self.x * self.x
obj = MyObject()
hasattr(obj, 'x')       # 有属性'x'吗?
print obj.x
print hasattr(obj, 'y') # 有属性'y'吗?
setattr(obj, 'y', 19)   # 设置一个属性'y'
print hasattr(obj, 'y') # 有属性'y'吗?
print getattr(obj, 'y') # 获取属性'y'
print obj.y             # 获取属性'y'
print len('sa')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值