代码改变世界

26-Python3 面向对象

2018-11-20 13:27  改改~_~  阅读(175)  评论(0编辑  收藏  举报

26-Python3 面向对象

'''
面向对象技术简介
'''

'''
类定义
'''

'''
类对象
'''
class MyClass:
    i = 12345
    def f(self):
        return 'hello,runoob'

x = MyClass()  #实例化类
print('类的属性为:',x.i) #访问类的属性
print('类的方法为:',x.f()) #访问类的方法


class Complex:
    def __init__(self,realpart,imagpart):
        self.r = realpart
        self.i = imagpart
x = Complex(3.0,-4.5)
print(x.r,x.i)



'''
self代表类的实例,而非类
'''
class Test:
    def prt(self):
        print(self)
        print(self.__class__)
t = Test()
t.prt()

'''
类的方法
'''
class people:
    name = ''
    age = 0
    __weight =0
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print('{}说:我{}岁了!'.format(self.name,self.age))

p = people('Runoob',10,30)
p.speak()

'''
继承
'''
class People:
    name = ''
    age = 0
    __weight = 0
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print('{}说:我今年{}岁了'.format(self.name,self.age))

class Student(People):
    grade = ''
    def __init__(self,n,a,w,g):
        People.__init__(self,n,a,w)
        self.grade = g
    def speak(self):
        print('{}说:我今年{}岁了,在读{}年级'.format(self.name,self.age,self.grade))

s = Student('Joo',23,90,'6')
s.speak()





'''
多继承,困了,累累,写遍下面读代码
'''
class people3:
    name = ''
    age = 0
    __weight = 0
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print('{}说:我{}了'.format(self.name,self.age))


#单继承
class student3(people3):
    grade = ''
    def __init__(self,n,a,w,g):
        people3.__init__(self,n,a,w)
        self.grade = g
    def speak(self):
        print('{}说:我{}岁了,在读{}年级'.format(self.name,self.age,self.grade))

#另外一个类
class speaker:
    name = ''
    toptic = ''
    def __init__(self,n,t):
        self.name = n
        self.toptic = t
    def speak(self):
        print('我叫{},我是一个演说家,我今天演讲的主题为{}'.format(self.name,self.toptic))

#多重继承
class sample(speaker,student3):
    a = ''
    def __init__(self,n,a,w,g,t):
        student3.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)


# class sample(student3,speaker):
#     a = ''
#     def __init__(self,n,a,w,g,t):
#         student3.__init__(self,n,a,w,g)
#         speaker.__init__(self,n,t)


test = sample('Tim',25,80,4,'Python')
test.speak()#方法名相同,默认调用的是在括号中排前的父类的方法


##再重新敲一遍下面的代码
class people:
    name = ''
    age = 0
    __weight = 0
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print('{}说:我今年{}'.format(self.name,self.age))

class student(people):
    grade = ''
    def __init__(self,n,a,w,g):
        people.__init__(self,n,a,w)
        self.grade = g
    def speak(self):
        print('{}说,我{}岁了,在读{}年级'.format(self.name,self.age,self.grade))
class speaker:
    name = ''
    toptic = ''
    def __init__(self,n,t):
        self.name = n
        self.toptic = t
    def speak(self):
        print('{}说,我是一个演说家,我演讲读主题为{}'.format(self.name,self.toptic))

class sample(speaker,student):
    a = ''
    def __init__(self,n,a,w,g,t):
        student.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)

test = sample('Tim',25,80,4,'Python')
test.speak()

'''
方法重写
'''
class Parent:
    def myMethod(self):
        print('调用父类方法')

class Child(Parent):
    def myMethod(self):
        print('调用子类方法')

c = Child()
c.myMethod()
super(Child,c).myMethod()
'''
类属性与方法
'''
##类的私有属性
class JustCounter:
    __secretCount = 0
    publicCount = 0
    def count(self):
        self.__secretCount +=1
        self.publicCount +=1
        print(self.__secretCount)
counter = JustCounter()
counter.count()
counter.count()
print(counter.publicCount)
# print(counter.__secretCount)  #报错,实例不能访问私有变量


##类的私有方法

class Site:
    def __init__(self,name,url):
        self.name = name
        self.url = url
    def who(self):
        print('name:',self.name)
        print('url:',self.url)
    def __foo(self):
        print('这是私有方法')
    def foo(self):
        print('这是公有方法')
        self.__foo()
x = Site('菜鸟教程','www.runoob.com')
x.who()
x.foo()
# x.__foo()  #会报错的

##类的专有方法
pass


##运算符重载

class Vector:
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def __str__(self):
        return 'Vector({},{})'.format(self.a,self.b)
    def __add__(self, other):
        return Vector(self.a+other.a,self.b+other.b)

v1 = Vector(2,10)
v2 = Vector(5,-2)
print(v1 + v2)