python基础——基础代码每日复习002

面向对象:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Employee:
    '所有员工的基类'
    empCount = 0

    def __init__(self, name, salary):
        self.name = name
        self.salary = salary
        Employee.empCount += 1

    def displayCount(self):
        print("Total Employee %d" % Employee.empCount)

    def displayEmployee(self):
        print("Name : ", self.name, ", Salary: ", self.salary)

ey = Employee("小王",100.9)
ey.displayCount()
ey.displayEmployee()

ey = Employee("小张",100.9222)
ey.displayCount()
ey.displayEmployee()

print(Employee.empCount)

self 代表的是类的实例,代表当前对象的地址,而 self.__class__ 则指向类。
class Employee:
    '所有员工的基类'
    empCount = 0

    def __init__(self, name, salary):
        self.name = name
        self.salary = salary
        Employee.empCount += 1
    def displayCount(self):
        print(self)                 #self 代表的是类的实例,代表当前对象的地址,而 self.__class__ 则指向类。
        print(self.__class__)

    def displayEmployee(self):
        print(self)                 #self 代表的是类的实例,代表当前对象的地址,而 self.__class__ 则指向类。
        print(self.__class__)

ey = Employee("小王",100.9)
ey.displayCount()
ey.displayEmployee()
print("==================================================")
ey = Employee("小张",100.9222)
ey.displayCount()
ey.displayEmployee()

添加,删除,修改类的属性

class Employee:
    '所有员工的基类'
    empCount = 0

    def __init__(self, name, salary):
        self.name = name
        self.salary = salary
        Employee.empCount += 1

    def displayCount(self):
        print("Total Employee %d" % Employee.empCount)

    def displayEmployee(self):
        print("Name : ", self.name, ", Salary: ", self.salary)

"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
emp1.displayEmployee()
print("---------------------------------------------------------------")
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp2.displayEmployee()
print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print("Total Employee %d" % Employee.empCount)
print("===========================================================")
emp1.age = 7  # 添加一个 'age' 属性
emp1.age = 8  # 修改 'age' 属性
print(emp1.age)
del emp1.age  # 删除 'age' 属性

 类属性的分类和类方法的分类:

'''

1、类体中、所有函数之外:此范围定义的变量,称为类属性或类变量;

2、类体中,所有函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量;

3、类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量。

'''


'''

1、采用 @classmethod 修饰的方法为类方法;

2、采用 @staticmethod 修饰的方法为静态方法;

3、不用任何修改的方法为实例方法。——在类中定义的方法默认都是实例方法。不仅如此,类的构造方法理论上也属于实例方法,只不过它比较特殊。
                            实例方法最大的特点就是,它最少也要包含一个 self 参数,用于绑定调用此方法的实例对象(Python 会自动完成绑定)。实例方法通常会用类对象直接调用

'''










#Python类实例方法



class CLanguage:
    #类构造方法,也属于实例方法
    def __init__(self):
        self.name = "C语言中文网"
        self.add = "http://c.biancheng.net"
    # 下面定义了一个say实例方法
    def say(self):
        print("正在调用 say() 实例方法")


clang1 = CLanguage()
clang1.say()

print("----------------------------------")

#类名调用实例方法,需手动给 self 参数传值
clang2 = CLanguage()
CLanguage.say(clang2)











print("====================================================")









#Python类方法

'''

#注意,如果没有 @classmethod,则 Python 解释器会将 fly() 方法认定为实例方法,而不是类方法。
#类方法推荐使用类名直接调用,当然也可以使用实例对象来调用(不推荐)


'''

class CLanguage:
    #类构造方法,也属于实例方法
    def __init__(self):
        self.name = "C语言中文网"
        self.add = "http://c.biancheng.net"

    #下面定义了一个类方法
    @classmethod
    def info(cls):
        print("正在调用类方法",cls)


#使用类名直接调用类方法
CLanguage.info()


print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")


#Python类静态方法

'''

静态方法,其实就是我们学过的函数,和函数唯一的区别是,静态方法定义在类这个空间(类命名空间)中,而函数则定义在程序所在的空间(全局命名空间)中。

静态方法没有类似 self、cls 这样的特殊参数,因此 Python 解释器不会对它包含的参数做任何类或对象的绑定。也正因为如此,类的静态方法中无法调用任何类属性和类方法。


'''



class CLanguage:
    @staticmethod
    def info(name,add):
        print(name,add)

property()函数:定义属性

Python 中提供了 property() 函数,可以实现在不破坏类封装原则的前提下,让开发者依旧使用“类对象.属性”的方式操作类中的属性。


property() 函数的基本使用格式如下:   属性名=property(fget=None, fset=None, fdel=None, doc=None)

其中,fget 参数用于指定获取该属性值的类方法,fset 参数用于指定设置该属性值的方法,fdel 参数用于指定删除该属性值的方法,最后的 doc 是一个文档字符串,用于说明此函数的作用。

注意,在使用 property() 函数时,以上 4 个参数可以仅指定第 1 个、或者前 2 个、或者前 3 个,当前也可以全部指定。也就是说,property() 函数中参数的指定并不是完全随意的。

class CLanguage:
    #构造函数
    def __init__(self,n):
        self.__name = n

    #设置 name 属性值的函数
    def setname(self,n):
        self.__name = n

    #访问nema属性值的函数
    def getname(self):
        return self.__name

    #删除name属性值的函数
    def delname(self):
        self.__name="xxx"

    #为name 属性配置 property() 函数
    name = property(getname, setname, delname, '指明出处')

#调取说明文档的 2 种方式
#print(CLanguage.name.__doc__)

help(CLanguage.name)
clang = CLanguage("C语言中文网")

#调用 getname() 方法
print(clang.name)

#调用 setname() 方法
clang.name="Python教程"

print(clang.name)

#调用 delname() 方法
del clang.name

print(clang.name)

class CLanguage:
    #构造函数
    def __init__(self,n):
        self.__name = n

    #设置 name 属性值的函数
    def setname(self,n):
        self.__name = n

    #访问nema属性值的函数
    def getname(self):
        return self.__name

    #删除name属性值的函数
    def delname(self):
        self.__name="xxx"

    #为name 属性配置 property() 函数
    name = property(getname)


help(CLanguage.name)
clang = CLanguage("C语言中文网")

#调用 getname() 方法
print(clang.name)

print("=====================================")

#调用 setname() 方法
clang.name="Python教程"

print(clang.name)

#调用 delname() 方法
del clang.name

print(clang.name)

'''

装饰器接受一个函数作为参数,添加一些功能并返回它。

'''

'''

饰器是一种函数,它接受一个函数作为参数,并返回一个新的函数或修改原来的函数。

装饰器的语法使用 @decorator_name 来应用在函数或方法上。

Python 还提供了一些内置的装饰器,比如 @staticmethod 和 @classmethod,用于定义静态方法和类方法。

装饰器的应用场景:

日志记录: 装饰器可用于记录函数的调用信息、参数和返回值。
性能分析: 可以使用装饰器来测量函数的执行时间。
权限控制: 装饰器可用于限制对某些函数的访问权限。
缓存: 装饰器可用于实现函数结果的缓存,以提高性能。

'''
import time

# 定义一个装饰器函数来计算函数执行时间
def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"函数{func.__name__}执行耗时:{end_time - start_time}秒")
        return result

    return wrapper


# 使用装饰器
@timer  # 等同于 example = timer(example)
def example():
    time.sleep(1)
    print("这是一个示例函数。")


# 调用被装饰的函数
example()

 参考:::  https://www.cainiaojc.com/python/python-decorator.html

def smart_divide(func):
   def inner(a,b):
      print("我要做除法",a,"和",b)
      if b == 0:
         print("哎呀!不能除")
         return

      return func(a,b)
   return inner

@smart_divide
def divide(a,b):
    return a/b


divide(9,3)

print("===================")

divide(9,0)

class Celsius:
    def __init__(self, temperature=0):
        self._temperature = temperature

    def to_fahrenheit(self):
        return (self.temperature * 1.8) + 32

    @property
    def xx(self):
        print("获得值")
        return self._temperature

    @xx.setter
    def A(self, value):
        if value < -273:
            raise ValueError("零下273度是不可能的")
        print("设定值")
        self._temperature = value

c = Celsius(20)
print(c.xx)
print("========================")
c.A = -200
print(c.xx)

class Bird:
    #鸟有翅膀
    def isWing(self):
        print("鸟有翅膀")
    #鸟会飞
    def fly(self):
        print("鸟会飞")
class Ostrich(Bird):
    # 重写Bird类的fly()方法
    def fly(self):
        print("鸵鸟不会飞")
# 创建Ostrich对象
ostrich = Ostrich()
#调用 Ostrich 类中重写的 fly() 类方法
ostrich.fly()
'''

如何调用被重写的方法

'''

class Bird:
    #鸟有翅膀
    def isWing(self):
        print("鸟有翅膀")
    #鸟会飞
    def fly(self):
        print("鸟会飞")
class Ostrich(Bird):
    # 重写Bird类的fly()方法
    def fly(self):
        print("鸵鸟不会飞")


# 创建Ostrich对象
ostrich = Ostrich()


#调用 Bird 类中的 fly() 方法
Bird.fly(ostrich)
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("%s 说: 我 %d 岁。" % (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("%s 说: 我 %d 岁了,我在读 %d 年级" % (self.name, self.age, self.grade))


s = student('ken', 10, 60, 3)

s.speak()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值