day9-20180419笔记

笔记:Python的class类

 

pycharm下载github代码

 

 

pycharm提交代码到github

点击“File”,选择“Default Settings”

 

 设置git

 设置github

Host:填写github.com仓库地址

Auth Type:选择“Password”

Login:github登录账号

Password:github登录密码

 

 

 

 

 

 

登录github.com,就可以找到提交的项目代码 

 

 

一、Python的class类

类, 面向对象一个很重要的载体
1. 类的定义
class StuentName(object): #(object)是一个超级类,StuentName继承object的类
pass
2. 类里面一般都是由很多函数组成,函数的第一个参数默认都是self
如果需要全局变量,就在类的内部直接定义
3. 类的内部在调用函数或者调用变量的时候,必须使用self.变量 或者self.函数
self 代表的是类实例化以后的个体
4.类的实例化
实例化类的首字母小写作为实例,然后类实例化
studentName = StudentName();
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/20 20:04
# @Author  : yangyuanqiang
# @File    : demon2.py



class A(object):
    name = "ajing"
    def hello(self):
        print("hello {0}".format(self.name))
    def test(self):
        self.hello()
        print("This is test.")

a = A()
b = A()

 

类的构造器
就是类在初始化的时候,首先,必须要执行的函数
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/20 20:05
# @Author  : yangyuanqiang
# @File    : demon3.py


class A(object):
    #
    def __init__(self, name):
        self.name = name
        print("init class A")
    def hello(self):
        print("hello {0}".format(self.name))

a = A("ajing")
a.hello()   #调用函数 hello(self)

以上实例输出的结果

init class A
hello ajing

 

Python同样有限的支持多继承形式。多继承的类定义形如下例:

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

 

继承  spuer
重写
调用: 先去找子类中的方法,如果子类中找不到对应的方法,就是父类中找
多继承:如果父类中都有该方法,那么先继承谁, 就用谁的方法。

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/20 20:05
# @Author  : yangyuanqiang
# @File    : demon4.py




class Animal(object):
    def __init__(self, name):   #定义一个构造器
        print("你现在正在初始化一个Animal")
    def run(self):  #定义一个函数
        print("Animal can run.")

class Bird(Animal):     #子类继承Animal父类的特性
    def __init__(self):
        print("bird")
    def fly(self):
        print("Bird can fly.")

class Cat(Animal):      #子类继承Animal父类的特性
    def __init__(self, name, sex):
        self.name = name
        self.sex = sex
        super(Cat, self).__init__(self.name)
        print("我是一只猫,啦啦啦啦")
    def jiao(self):
        print("miao miao miao miao")
    def run(self):
        print("我是一只猫,会上树来会跑路.")


class BianYi(Cat, Bird):
    pass


# animal = Animal()  #继承
# cat = Cat()      #重写
# cat.run()

# bianYi = BianYi()

cat = Cat("mao", "man")

 以上实例输出的结果

你现在正在初始化一个Animal
我是一只猫,啦啦啦啦

 

java的思想

java  中的set和get方法
private host;
private port;
public getHost():
return host
public setHost(String host):
this.host = host

模拟,对数据库的操作

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/20 20:05
# @Author  : yangyuanqiang
# @File    : demon5.py



'''
host
port
username
password
dbname
'''

class DbArgs(object):
    # 只有类本身才可以调用
    __host = str("1.1.1.1")
    __port = str()
    __username = str()
    __password = str()
    __dbname = str()

    # 任何人可以调用
    name = "ajing"

    # 只能实例自己调用
    _host = "asdlfjasdl"
    def getHost(self):
        return self.__host

    def setHost(self, host):
        self.__host = host

dbArgs = DbArgs()
print(dbArgs.getHost())
dbArgs.name = "就是要改你,怎么的"
print(dbArgs.name)
print(dbArgs._host)

以上实例输出的结果

1.1.1.1
就是要改你,怎么的
asdlfjasdl

 

例子:
10学生
id
name
score
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/20 20:06
# @Author  : yangyuanqiang
# @File    : demon7.py



'''
例子:
10学生
id
name
score
'''

# class Student(object):
#     __id = int()
#     __name = str()
#     __score = int()
#
#     def getId(self):
#         return self.__id
#     def setId(self, id):
#         self.__id = id
#
#     def getName(self):
#         return self.__name
#     def setName(self, name):
#         self.__name = name
#
#     def getScore(self):
#         return self.__score
#     def setScore(self, score):
#         self.__score = score
import codecs


class Student(object):
    def __init__(self, id, name, score):
        self.id = id
        self.name = name
        self.score = score



class InitStduents():
    def __init__(self):
        self.students = list()
        self.init()
    def init(self):
        self.students.append(Student(1001, "aaa", 59))
        self.students.append(Student(1002, "bbb", 96))
        self.students.append(Student(1003, "ccc", 87))
        self.students.append(Student(1004, "ddd", 89))
        self.students.append(Student(1005, "eee", 33))
        self.students.append(Student(1006, "fff", 85))
        self.students.append(Student(1007, "ggg", 78))
        self.students.append(Student(1008, "hhh", 97))
        self.students.append(Student(1009, "iii", 31))
        self.students.append(Student(1010, "jjj", 93))

    def sort(self):
        return sorted(self.students, key=lambda student: student.score)

    def writeFile(self, newStudents):
        with codecs.open("sortStudent.txt", "w")as f:
            for i in newStudents:
                f.write("id = {0}".format(i.id))
                f.write("\t")
                f.write("name = {0}".format(i.name))
                f.write("\t")
                f.write("score = {0}".format(i.score))
                f.write("\n")


def main():
    students = InitStduents()
    newStudents = students.sort()
    students.writeFile(newStudents)


if __name__ == "__main__":
    main()

以上实例输出的结果

id = 1009    name = iii    score = 31
id = 1005    name = eee    score = 33
id = 1001    name = aaa    score = 59
id = 1007    name = ggg    score = 78
id = 1006    name = fff    score = 85
id = 1003    name = ccc    score = 87
id = 1004    name = ddd    score = 89
id = 1010    name = jjj    score = 93
id = 1002    name = bbb    score = 96
id = 1008    name = hhh    score = 97

 

类的封装

python通过变量名命名来区分属性和方法的访问权限,默认权限相当于c++和java中的public

类的私有属性: __private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时self.__private_attrs。

类的私有方法:__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 self.__private_methods

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/20 20:06
# @Author  : yangyuanqiang
# @File    : demon8.py


# 阶乘的和

class JinCinCount(object):
    def __init__(self, n):
        self.n = n
    def jc(self, n):
        result = 1
        if n == 0:
            return result
        else:
            for i in range(1, n+1):
                result *= i
            return result
    def count(self):
        count = 0
        for i in range(0, int(self.n) + 1):
            count += self.jc(i)
        print("count = {0}".format(count))

def main():
    n = input("Please inpurt a number: ")
    jinCinCount = JinCinCount(int(n))
    jinCinCount.count()

if __name__ == "__main__":
    main()

以上实例输出的结果

Please inpurt a number: 3
count = 10

 

 

总结:

1、重复看录播视频,加强练习类、继承、封装及方法的使用

 

posted @ 2018-04-20 18:46  Ivan_yyq  阅读(117)  评论(0编辑  收藏  举报